进程生命周期(Process Lifecycle)进程5个等级优先级别。理解性记忆。转换关系。apple iOS基于Unix。linux和Unix,进程的销毁是系统管理的。 1 foreground(前台/端的,优先级最高,最重要)正处于Activity Resume()状态整处于bound服务交互的状态(activity和service正在交互)正处于服务在前台运行的状态,startForeground()被调用。(资源不够,想关闭服务时,需要手动确认,不会直接关闭后台服务)Service生命周期函数正在被执行,onCreate(),onStart(),onDestroy()BroadcastReceiver正在执行onReceive()方法(正在接收系统消息)杀死Foreground Process需要用户响应-因为这个安全优先级是最高的2 visibleActivity不在前端显示,但也没有完全隐藏,能够看得见,比如弹出一个对话框,Input Method一个bound到visible或者foreground的activity的service(如输入法,半透明对话框出现时)3 service正在运行的,不在上述两种状态的service(如较长时间的运算)4 background不可见状态的activity进程,onStop()被调用5 empty没有运行任何的components的进程,保留这个进程主要是为了缓存的需要。(输入内容被存在缓存,通过空进程恢复数据) 一个service(可能)是被两种不同优先级进程启动的,优先考虑优先级较高的,认为这个进程是更高优先级的。eg,demo,演示foreground和background package manager 类 负责将manifest中的配置转换成类的实例? android如何启动:package service远程服务,package manager加载manifest,找到launcher
Android中的Context介绍 Java Context回顾 Context是什么:环境变量句柄上下文 Context是个抽象类。Activity,Service是Context子类。startActivity()是在Context中实现,通过ContextImpl实现(2.0后新增)。 是一只手,有唯一性,手里有很多活。
Android深入浅出 麦可网 张凌华Sundy Zhang思维导图课程准备联系方式
ADB,DDMS(Mars的教程),monkey(android内置的自动测试程序/工具) 模拟器中安装360等应用 cmdadb shell 进入模拟器路径提示#,具有root权限。cd datacd datamonkey -p(package) com.qihu360.mobelsafe -v(测试次数和频率) 1500monkey -p com.uc.brower -v 500 出现force close,ANR(Application Not Responding) verbose 唠叨 (黑)--开发用debug (蓝)--开发用info (绿)worning(黄)error (红) 何时产生log文件?产生异常退出(uncaused exception),FC,ANR。何时产生ANR:1 界面操作(按钮点击)超过5s无响应2 handlemessage回调函数执行超过10s。处理过长。logo文件路径data\log\ (模拟器中无) logo文件组成,三部分1 系统信息2 事件信息--重点分析3 虚拟机信息,包括进程、线程信息 如何利用log文件,信息:关键词ANR,Fatal
一、Context1、Context是什么 1)、环境变量 2)、句柄 3)、上下文
应用框架底层系统移植的综合准备工具:svn版本控制cygwin or ubuntuandroid源代码sourceinsight
消息的发送实现异步,这个又讲错了,也就是 采用handler.post (Runnable),没有开启一个新的线程,实际上还是同步。 Android中异步实现方法:1) 继承Thread2) 实现Runnable接口3)Handler4)AsyncTask
一个Activity构造 的时候一定会构造一个Windw(PhoneWindow)并且只有1个,并且这个窗户有一个ViewRoot(View或者ViewGroup),然后addView.WindowManagerService接收信息,并且回调Activity函数 Activity是控制单元window 是模型View 真正的显示试图
Android应用程序启动过程:Laucher(Laucher.java)Laucher和 ACTION_BOOT_COMPLETED谁在后? Laucher在前,ACTION_BOOT_COMPLETED 在后
Android系统启动过程1、开机开始:Linux内核启动:bootloader、Linux kernel(如驱动的加载)2、Android系统启动Init.rc启动文件(入口启动文件)1) /system/bin/Servicemanager(守护进程,与界面无关,会持续运行在后台,用来接受响应),启动这个守护进程会早于davlik虚拟机之前2) 会启动zygote进程(孵化davlink 虚拟机)3)启动Laucher 3、应用程序是如何启动
什么时候用OnSaveInstanceState在系统回收当前Activity之前会调用onSaveInstanceState,按back键此方法不会调用,按Home键会调用。 onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,而不应该用来保存持久化数据,持久化数据应该当用户离开当前的activity时,在onPause()中保存(比如将数据保存到数据库或文件中)。说到这里,还要说一点的就是在onPause()中不适合用来保存比较费时的数据,所以这点要理解。
Manifest 解析文件的过程 1、系统启动候,PackageManagerService读取所有安装的应用程序Manifest信息,并在内存中会建立一个映射表,以供查询。2、启动应用程序的时候,Laucher进行系统级判断(比如启动一个Activity类,会查询刚才建立的那张内存映射表),比如最小SDK等3、四大组件在需要的时候实例化 第一层(<Manifest>):(属性)<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.woody.test" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] ></manifest>A、xmlns:android定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。B、package指定本应用内java主程序包的包名,它也是一个应用进程的默认名称C、sharedUserId表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。详见:http://wallage.blog.163.com/blog/static/17389624201011010539408/D、sharedUserLabel一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义G、installLocation安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)选择auto,系统将会根据存储空间自己去适应选择internalOnly是指必须安装到内部才能运行(注:需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD卡上。现默认为安装在内部,如果把APP安装在SD卡上,首先得设置你的level为8,并且要配置android:installLocation这个参数的属性为preferExternal)
Android进程等级(5个等级)前台进程(Forground service)、Visible、service、background、empty 1、Foreground process:优先级别最高(1)正处于onResume状态(2)正处于bind服务状态(3)正处于服务在前台运行状态(调用startForeground(),使其处于前台进程)(4)Service生命周期正在被执行(onCreate、onStart、onDestroy)(5) Receiver正在执行onReceive()方法2、Visible Process 当前的Activity不是最前端,但是还是可以看到过,比如弹出一个对话框或者输入法3、Service Process正在运行的,不在上述两种状态的Service4、background process如按home键,应用常驻在内存中5、empty process 没有任何Compoents的进程,保留这个进程主要是为了缓存需要。 Android进程是如何启动的?通过远程服务,packageService ,然后通过PackageManager
这个人好像 很牛逼样子