android Process/Thread 总结

来源:互联网 发布:网络道德问题调查报告 编辑:程序博客网 时间:2024/06/08 10:58

TitleLinkprocess and threadhttp://developer.android.com/guide/components/processes-and-threads.htmlbound servicehttp://developer.android.com/guide/components/bound-services.html进程间通信AIDLhttp://developer.android.com/guide/components/aidl.html

默认情况下,在同一个应用中,只有一个进程,和一个主线程,但是也可以自行安排组件运行在单独的

进程中,或者开启一个新的线程.
可以在 mafinfest 中指定进程的类型,<activity>,<service>,<receiver>,<provider>都支持指定属性
android:process 让该组件运行在一个单独的进程中.

如:

 <service          android:name="com.example.servicetest.MyService"          android:process=":remote" >   </service>  



 在<application>中也可以指定该属性,为所有组件指定默认值


 在Android 系统中如果因为内存等系统资源不足时,系统将会选择一些进程杀死.挑选进程有一个

 等级制度,在挑选进程过程中,越在下面等级的进程越先被杀死.


1.Foreground process

如果一个进程满足以下条件中的任何一个,便属于前台进程:

1.它承载的Activity,用户正在进行交互 : onResume()调用

2.它承载的Service与一个正在和用户交互的Activity绑定

3.它承载的Service运行在前台--调用了 startForeground()

4.它承载的Service执行它生命周期中的调用 : onCreate(), onStart(), onDestroy()

此级别是最后被杀死的进程,一般是内存资源实在太小,前台进程不能全部执行,需要杀死部分获得用户接口的

相应.


2.Visible process

如果一个进程没有前台的组件,但是仍然在屏幕上对用户有影响,属于 visible process 满足:

1.它承载的Activity不在前台,但是仍然可见 onPause()中.比如 被Dialog部分遮挡.

2.它承载的Service与一个 visible/foreground Activity 绑定


3. Service process

一个进程中有通过 startService() 开始,正在运行的 service 没有被划分到上面两种类型.这类进程虽然

对于用户来并不能直观看见,但是可能执行一些用户比较在意的任务,比如下载数据.


4.Background process

进程承载的Activity对于用户不可见  :onStop() 中,对于用户体验来说没有什么影响,这一类进程很多

所以它们会在一个 LRU (least recently used )list 中,确保最少使用的进程先被杀死, 如果acvityi的生命周期中

的方法很好的调用,杀死该进程对用户视觉效果并不会有很大影响.


5.Empty process

进程不承载任何活动的组件,容许这类进程存在的唯一原因是缓存,提升一个组件下一启动速度,这类进程虽然

经常被杀死.


1.如果一个进程满足多个等级的条件,则它的等级为其中最高的等级.

2.一个为其它进程服务的进程永远不会比它服务的进程的等级低.

3.因为承载运行中的service 比在后台的acitivity的进程的优先级高,可以将一些任务放在service而不是activity

的子线程中,因为即使用户离开了activity也能保证任务至少有 service process 的等级.


Thread


主线程负责对用户接口组件事件的调度,比如绘图事件,同时也是应用中组件与 Android UI ToolKit 交互的
线程,也成为UI线程.

1.不要阻塞主线程
2.不要在子线程进行UI操作

有几个方法可以在子线程中通过UI线程更改UI:

1.Activity.runOnUiThread(Runnable)
2.View.post(Runnable)
3.View.postDelayed(Runnable, long)

比如:

public void onClick(View v) {    new Thread(new Runnable() {        public void run() {            final Bitmap bitmap =                    loadImageFromNetwork("http://example.com/image.png");            mImageView.post(new Runnable() {                public void run() {                    mImageView.setImageBitmap(bitmap);                }            });        }    }).start();}


0 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胳膊抻筋一动就疼怎么办 肩膀受风了很疼怎么办 开空调受风了怎么办 胳膊受风了疼怎么办 孩子胳膊抻筋了怎么办 胳膊被风吹了疼怎么办 月子里胳膊受风怎么办 受风了胳膊酸痛怎么办 胳膊受风了在家怎么办 手臂烧伤手肿了怎么办 胳膊里的筋疼怎么办 3岁胳膊背筋了怎么办 左胳膊筋一直疼怎么办 手臂突然筋扭了怎么办 胳膊扭了肿了怎么办 胖人走路磨大腿怎么办 脖子上长了个淋巴结怎么办 面部危险三角区长痘痘怎么办 儿童脖子上有淋巴结节怎么办 左侧颈根部淋巴结肿大怎么办 人的三角区肿了怎么办 刮三角区肿了怎么办 乳腺增生引起的腋窝淋巴结怎么办 右边脸比左边脸大怎么办 六个月宝宝脖子有点歪怎么办 大人的头偏了怎么办 宝宝脖子睡偏了怎么办 宝宝头歪向左边怎么办 一岁宝宝头歪怎么办 宝宝头往右边歪怎么办 八个月宝宝头歪怎么办 宝宝头往左边偏怎么办 11月婴儿歪脖子怎么办 婴儿头往左边偏怎么办 宝宝头网的高怎么办 宝宝头歪向一边怎么办 2岁宝宝头睡偏了怎么办 6岁儿童头有点歪怎么办 宝宝脖子有点偏左边歪怎么办 宝宝脖子偏了怎么办呢 斜颈导致的脸歪怎么办