Android进程与线程

来源:互联网 发布:网络渗透测试工程师 编辑:程序博客网 时间:2024/06/05 06:41

进程与线程

.概述

android的一个app的某个组件启动时,而这时候该app的其他组件还没启动,也就是从android系统开机后app第一次启动时。android系统会为该app分配一个Linux进程(process),以及一个主线程(main thread)。如何在改进程的主线程里运行该app及其组件。默认情况下app的组件都是运行在主进程里的。当然,我们可以为app的组件开辟一个新的进程来运行。可以在进程里开启多个线程。

.进程

1.android的同一个app的组件默认运行在同一个进程里,但是我们可以通过在manifest里设置该组件运行的进程。可以使同一个app的组件运行在不同进程里,也可以使不同app的组件运行在相同的进程里(通过共享UID)。

2.android系统会在系统资源紧缺的情况下kill掉相对不那么重要的进程,比如一个运行在后台的app的重要性就比运行在前台与用户交互的app重要性低。当系统要kill掉某个进程时,就会把在该进程里的组件给一起kill掉。

3.进程优先级(优先级最高的在最前)

1.前台进程:即用户正在交互的进程,有如下情况

1.该进程的activity正在和用户交互

2.该进程的service与正在和用户交互的activity连接bound

3.该进程的service运行在前台,即该service里调用了startForeground()

4.该进程的service正在执行其生命周期里的函数(onCreate(),onStart(),onDestroy())

5.该进程的BroadcastReceiver正在执行onReceiver()方法。

2.可见进程:该进程不是前台进程,但该进程会影响用户在屏幕上所看到的。有如下情况

1.该进程的activity不是在前台,但是仍然可以可见它。如采用透明背景的activity后面的activity

2.该进程的service和一个可见的activity相关联bound

3.服务进程:该进程的service通过startService()启动了。结果service所做的事跟用户所看的没什么大关联,但是 它仍然在做一些用户可能在意的事情,比如在后台播放音乐,下载网络资源等。对于这样的进程,系统不会kill它, 除非非得杀死它才能保证前台进程和可见进程的执行。

4.后台进程:对于那些activity不在前台与用户交互的app进程,系统会在需要时kill它(为了保证前台进程,可见 进程,服务进程的执行)。对于那些已经在后台的app,系统所以LRU算法来管理,越久没被用户操作的进程越容 易被kill掉。

5.空进程:指的是那些没有app组件运行的进程,系统暂时保留它们的原因是为了线程需要使用到进程时那个快速 使用而不需要去向Linux申请。android会平衡系统资源的情况下选择kill掉空进程。

4.一个后台的service比一个后台activity的优先级高。所以当一个activity需要做一些耗时的操作时,最后是启动一个service而不是启动一个工作线程,特别是那些当离开该activity后还需要执行的操作,如上传文件到网络上时。

.线程

1.主线程也叫UI线程,android默认对所以启动的组件都运行在主线程上,且系统对它们的调遣都是在主线程里做的, 所以系统的许多回调函数都是发生在UI线程里的,如生命周期函数的回调,onKeyDown()等

2.主线程的任务有,对点击事件的分发;绘图;同时也是用户与UI交互的线程;

3.当主线程里某个耗时操作超过5秒没放映的话,系统就会ANR

4.因为androidUI操作是非线程安全的,所以不能在其他线程里直接操作UI

5.android原生提供的在其他线程操作UI的方法有

1.Activity.runOnUIThread(Runnable)

2.view.post(Runnable)

3.view.postDelay(Runnable)

4.handler

5.AsynTask

 

0 0
原创粉丝点击