您的位置:首页 > 移动开发 > Android开发

Android菜鸟的成长笔记——初识Activity

2015-10-09 10:30 495 查看
一、 产生Log文件

1、 程序异常退出,uncaused exception;

2、 程序强制关闭,Force Closed;

3、 程序无响应,Application No Response。

二、 Log文件的位置

/data/log文件夹下

三、 Log文件组成

1、系统基本信息,包括内存、CPU、进程队列、虚拟内存、垃圾回收等信息。

2、事件信息,类似于DDMS中的信息;

3、虚拟机信息,包括进程、线程的跟踪信息;

四、 分辨率

HVGA:480x320

QVGA:320x240

WVGA:800x480

五、 Android编程需要考虑的问题

1、性能(更快、更灵敏)

2、响应能力(拒绝ANR)IO操作(file、数据库、网络)和复杂的运算最后用异步;

3、无缝,与第三方程序的交互,前后台的切换

4、安全:对操作权限的考虑

六、 Android应用程序基本特性

1、.apk是Android应用程序安装格式;.dex是Android的可执行二进制文件

2、Android操作系统是基于Linux的多用户操作系统,每一个应用程序都是使用不同的用户

3、默认情况下,一个应用程序一个UserID,系统设定的,不需要手动去设定,针对这样的应用程序,该用户有权限进行所有操作

4、每一个进程都有自己的虚拟机,所有每个应用程序相对独立

5、默认情况下,应用程序都有自己的Linux进程,系统会决定何时关闭它,当资源不够的时候,例外:可以给两个应用程序共享一个UserID,让彼此之间共享资源,应用程序可以请求访问系统资源,比如通讯录短信等,但需要安装的时候被授权。

七、 Android应用程序的组件

应用程序四大组件:Activity、Service、Content Provider、Broadcast Receiver

重要对象Intent

其他:Launcher&Widget、Notification

八、 ADB

Adb uninstallPACKAGE_NAME 卸载

Adb install –rPackage_name 安装

Adb push 上传

Adb pull 下载

Adb shell 进入设备命令行

Adb shell am startPackage_name/activity_in_package

Adb shell am start–n com.test.demo/.MainActivity

Adb logcat | grep“FATAL”

Adb root

Adb remount

Adb reboot

Adb shell am start–a android.intent.action.CALL –d
tel:10086

Adb shell am start–a android.intent.action.VIEW –d http://www.csdn.net
Adb shell monkey–v –p pkgname millisecond Monkey测试

九、 Manifest文件

应用程序的全局配置文件

应用程序的入口配置

十、 Manifest约束

1、元素Elements 元素全部用小写;<manifest><application>必须有且仅有一个;同一级别的元素顺序无关,除了<activity-alias>必须跟在<activity>之后

2、属性 Attribute 除了name属性都是可选的;除了<manifest>的属性,其他元素属性都有android:前缀,但在类里面,这些是去掉的

十一、 Manifest何时解析

1、应用程序安装的时候,Manifest信息会放到一张系统索引表里面

2、系统启动的时候,PackagedManageService读取Manifest信息

3、应用程序时候,Launcher进行系统级判断,比如最小SDK等

4、四大组件在需要的时候实例化

十二、 Activity在 用到的时候实例化

十三、 Android的5个进程等级

1、Active Process前台进程 正处于ActivityResume()状态;处于与bound服务交互的状态;正处于服务在前台运行的状态(startForeground()被调用);Service生命周期函数正在被执行(onCreate(),onStart(),onDestroy());BroadcastReceiver正在执行onReceive()方法。杀死ForegroundProcess需要用户响应-因为这个安全优先级最高。

2、Visible Process 当前进程不是焦点,Activity不在前端显示,但也没有完全隐藏,能够看得见,比如弹出一个对话框。(InputMethod)。一个bound到visible或者Foreground的Activity的Service。

3、Service Process正在运行,不在上述两种状态的Service

4、Background Process 不可见状态的Activity进程,又没有任何相关Service运行的(onStop()被调用),系统有个后台进程列表,一般情况采取后进先出的原则来释放后台进程资源

5、Empty Process 没有任何Components的进程,保留这个进程主要是为了缓存的需要,实现快速启动。

十四、 在应用程序中,突然按了Back或者Home按钮,当前应用程序关闭了吗?

按home键后属于Background Process ,按Back键后属于Empty Process。

十五、 简单粗暴的干掉进程(不推荐使用)

System.exit(0);

Process.killProcess(Process.myPid());

十六、 什么是Activity

Activity 是Android的四大组件之一,Activity是Android应用程序提供用户交互界面的一个重要组件。Activity是业务类,是承载应用程序的界面以及业务行为的基础。包括UI,Service……

十七、 Intent和IntentFilter

Intent是在不同组件之间传递值而设计的一个数据结构。

十八、 Activity工作原理

Activity构造的时候,调用attach绑定一个window,Activity setContentView() 是在调用window. setContentView()。

十九、 动态添加组件

setContentView(R.layout.activity_main);

RelativeLayout layout = (RelativeLayout)findViewById(R.id.layout_main);

Button button = new Button(this);

button.setText("button test");

layout.addView(button, ActionBar.LayoutParams.WRAP_CONTENT);
二十、 横竖屏切换使用不同的布局

通过layout Design界面下的Create Landscape Variation可以创建一个横屏布局;

在res文件夹下新建一个layout_land文件夹,将当前的布局复制到这个文件夹下。

在屏幕方向改变后,Activity销毁重新调用onCreate()函数时,会自动调用横屏或者竖屏的布局。

Activity创建时调用:onCreate、onStart、onResume;

在屏幕方向改变时,Activity默认调用onPause、(onSaveInstanceState如果重写)、onStop、onDestroy,然后重新onCreate、onStart、onResume;

在运行中,按下Home键,在返回该应用的过程中:onPause、onStop、onRestart、onStart、onResume。

如果在Activity之间调转时调用了finish(),则Activity会调用onDestroy();若没有调用finish(),则跳转后,按返回键返回,该过程和运行中按下Home,在返回相同。

在重新实例化Activity的过程中,可以通过重写onSaveInstanceState方法保存部分数据。

二十一、 屏幕方向改变时,不重新实例化Activity

在Manifest.xml中的Activity节点加入

android:configChanges="orientation|keyboardHidden|screenSize"

则在屏幕方向改变时,不会重新实例化Activity,通过重载onConfigurationChanged()方法可以自己处理配置的改变,但是这种情况下很难使用替代资源。

二十二、 Android与MVC

Android应用是基于模型—控制器—视图(Model-View-Controller)的架构模式进行设计的。应用的任何对象都属于MVC中的一种。

1、模型对象:存储应用数据和业务逻辑;

2、视图对象:知道如何在屏幕上绘制自己以及如何响应用户的输入,屏幕上能够看见的对象;

3、控制对象:包含了应用的逻辑单元,是视图与模型的联系纽带,在Android中,控制器通常是Activity、Fragment、Services的一个子类。

二十三、 Activity的四种启动模式

Activity一共有以下四种launchMode:1.standard、2.singleTop、3.singleTask、4.singleInstance

1、Standard

不管有没有已存在的实例,都生成新的实例。

2、singleTop

如果发现有对应的Activity实例正在位于栈顶,则重复使用,不在生成新的实例

3、singleTask

如果发现所在的Activity栈中有对应的Activity实例,则在此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到当前界面。

4、singleInstance

如果系统其他栈中已经存在此Activity实例,则直接使用,启动它的Activity与它并不在一个task中,需要注意Back问题。处于单独的任务栈。

二十四、 Android对Activity的管理

Android采用Task来管理多个Activity,当启动一个应用时,Android会为之创建一个Task,然后实例化这个应用的入口Activity。

Android没有为Task提供API,可以通过Activity的getTaskId()获取它所在的Task的ID。

可以把task理解成Activity栈,Task以栈的形式来管理Activity,先启动的放在栈底,后启动的放在栈顶。

二十五、 Activity、view、window之间的关系Activity是Android应用程序的载体,允许用户创建一个用户界面,并提供用户处理事件的API,如onKeyEvent等。Activity的实例由系统维护。系统服务ActivityManager负责维护Activity的实例对象,并根据运行状态维护其状态信息。Activity可以理解成一个界面的载体,它本身不负责任何绘制,Activity内部聚合了一个Window对象,Activity关于界面的绘制是交给Window对象来做的。

Activity在onCreate之前调用attach方法,在attach方法中会创建window对象。window对象创建时并木有创建Decor对象对象。用户在Activity中调用setContentView,然后调用window的setContentView,这时会检查DecorView是否存在,如果不存在则创建DecorView对象,然后把用户自己的View 添加到DecorView中。

二十六、 Intent

Extras 附加信息

Category –intentFilter

Action –动作:Data-动作相关的值

ComponentName-Context组件名称

二十七、 startActivityForResult(Intentintent, int requestCode)

当Activity1需要Activity2返回数据时,可以在Activity1中通过startActivityForResult()启动Activity2,在Activity2中通过setResult设置返回给Activity1的数据。重写Activity1中的onActivityResult()函数,就可以通过判断resultCode的值确定是哪个Activity返回的值。

二十八、 Intent和Intentfilter

在Manifest.xml文件中,可以设置Activity节点的IntentFilter属性,为Activity添加标签。

<intent-filter>

<action android:name="lcy.activity" />

<category android:name="android.intent.category.DEFAULT"/>

<data android:scheme="http"/>

</intent-filter>

在定义Activity属性时,指定了Action,必须指定category,data用于指定数据类型,以及可以解析的数据格式。

在启动Activity时,通过intent.setAction(“lcy.activity”),指定要启动的Activity。

二十九、 Intent.ACTION_CALL与Intent.ACTION_DIAL

Intent.ACTION_CALL:直接拨号,需要在Manifest.xml中声明权限:

<uses-permission android:name="android.permission.CALL_PHONE"/>

Intent.ACTION_DIAL:调出拨号界面,并输入指定号码,不需要权限。

三十、 Activity的生命周期

在切换到下一个Activity的过程中:当前Activity从onResume到onPause,启动下一个Activity的onCreate,onStart,onResume,之前的Activity调用onStop,如果调用了finish()函数,则还会调用onDestroy。

当前Activity的界面弹出一个Dialog,Activity不会onPause,当弹出一个局部的Activity时,当前Activity进入onPause,按返回键后,Activity进入onResume。

三十一、 Manifest配置详解

Android:clearTaskOnLaunch launcher中重启这个任务都会清除底部以上的Activity,只有底部的Activity保留。

Android:finishOnTaskLaunch 当用户再次载入该Task时,一个存在的activity实例是否被关闭—true表示关闭。

三十二、 Android任务栈

1、 任务栈(task stack)(别名back stack后退栈) 记录存放activity的对象。

2、 一个应用程序一被开启系统就给他分配一个任务栈,当所有的activity都退出的时候,任务栈就清空了。

3、 在android操作系统里面会存在多个任务栈,一般情况下,一个应用程序一个任务栈。

4、 默认情况下, 关闭掉一个应用程序,清空了这个应用程序的任务栈。应用程序的进程还会保留。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: