Android应用程序基本原理(3:进程与线程)

2.3  进程与线程
当应用程序的第一个组件需要运行时,Android为它启动一个单线程执行的Linux进程。默认地,应用程序的所有组件运行在该进行和线程中。

不过,可以安排组件运行在其他的进程中,并且你可以为任何进程创建额外的线程。

2.3.1  进程
一个组件所运行在的进程是由manifest文件所控制的。组件元素--<activity>,<service>,<receiver>和<provider>--每个元素都有一个process属性用来指定组件应该运行在的进程。这些属性能够设置,因此每一个组件运行在它自己的进程中,或者因此一些组件共享一个进程而其他的不共享。它们也能被设置为使得不同应用程序的组件运行在相同的进程中—倘若这些应用程序共享同一Linux的用户ID并被赋予相同的授权。<application>元素也有一个process属性,可用其设置用于所有组件的默认值。

所有组件在指定进程的主线程中被初始化,并且系统对组件的调用也是从该线程进行分发的。各个单独的线程并不是为每一个实例而创建的。结果,响应这些调用的方法—类似View.onKeyDown()这样的方法(在稍后的“组件生命周期”一节中讨论的报告用户服务动作和生命周期通知)--总是运行在进程的主线程中。这意味着当被系统调用时,不应该有组件执行长期的或阻塞性的操作(诸如网络操作或循环计算),因为这将阻塞还在进程中的任何其他组件。你可以为长期运行的操作创建单独的进程(在下一小节的“线程”中会讨论)。

当内存低且被其他更即时服务用户的进程请求时,Android可能会决定在某一时刻关闭一个进程。运行在进程中的应用程序组件因此被销毁。当它们再一次有工作需要做时,一个用于这些组件的进程被重启。

当判断哪一个进程应该被终止时,Android会权衡它们对于用户的相对重要性。例如,它会更乐意关闭一个其activity不再在屏幕上可视的进程,而不是一个带有可见的activity的进程。因此,是否关闭一个进程的决定是依赖于运行在进程中的组件的状态。这些状态会是稍后章节“组件生命周期”的主题。

2.3.2  线程
虽然你可以限制你的应用程序到一个单一的进程,但是仍有可能有时候你需要创建一个线程来完成一些后台工作。因为用户接口必须总是要能快速响应用户的动作,所以持有一个activity的线程不应该持有时间消费型的操作,如网络下载。任何有可能不能立即完成的事情都应该被赋予一个不同的线程。

在代码中创建线程使用标准Java的Thread对象。Android提供了许多很方便的类来管理线程—Looper类用于运行线程内的一个消息循环,Handler类用于处理消息,而HandlerThread类用于设置一个带有消息循环的线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值