安卓学习笔记(八):进程和线程 跟着API指南来学习
来源:互联网 发布:下拉框刷词软件 编辑:程序博客网 时间:2024/06/05 01:57
1.进程
默认情况下,同一应用的所有组件均在相同的进程中运行,且大多数应用都不会改变这一点。 但是,如果您发现需要控制某个组件所属的进程,则可在清单文件中执行此操作。
各类组件元素的清单文件条目—<activity>
、<service>
、<receiver>
和 <provider>
—均支持 android:process
属性,此属性可以指定该组件应在哪个进程运行。您可以设置此属性,使每个组件均在各自的进程中运行,或者使一些组件共享一个进程,而其他组件则不共享。 此外,您还可以设置android:process
,使不同应用的组件在相同的进程中运行,但前提是这些应用共享相同的 Linux 用户 ID 并使用相同的证书进行签署。
此外,<application>
元素还支持 android:process
属性,以设置适用于所有组件的默认值。
2.进程生命周期
前台进程
重要性层次结构一共有 5 级。以下列表按照重要程度列出了各类进程(第一个进程最重要,将是最后一个被终止的进程):
用户当前操作所必需的进程。如果一个进程满足以下任一条件,即视为前台进程:
- 托管用户正在交互的
Activity
(已调用Activity
的onResume()
方法) - 托管某个
Service
,后者绑定到用户正在交互的 Activity - 托管正在“前台”运行的
Service
(服务已调用startForeground()
) - 托管正执行一个生命周期回调的
Service
(onCreate()
、onStart()
或onDestroy()
) - 托管正执行其
onReceive()
方法的BroadcastReceiver
没有任何前台组件、但仍会影响用户在屏幕上所见内容的进程。 如果一个进程满足以下任一条件,即视为可见进程:
- 托管不在前台、但仍对用户可见的
Activity
(已调用其onPause()
方法)。例如,如果前台 Activity 启动了一个对话框,允许在其后显示上一 Activity,则有可能会发生这种情况。 - 托管绑定到可见(或前台)Activity 的
Service
。
可见进程被视为是极其重要的进程,除非为了维持所有前台进程同时运行而必须终止,否则系统不会终止这些进程
服务进程正在运行已使用 startService()
方法启动的服务且不属于上述两个更高类别进程的进程。
后台进程
包含目前对用户不可见的 Activity 的进程(已调用 Activity 的 onStop()
方法)
不含任何活动应用组件的进程。保留这种进程的的唯一目的是用作缓存,以缩短下次在其中运行组件所需的启动时间。
使用服务可以保证,无论 Activity 发生什么情况,该操作至少具备“服务进程”优先级。 同理,广播接收器也应使用服务,而不是简单地将耗时冗长的操作放入线程中。3.线程
Android 的单线程模式必须遵守两条规则:
- 不要阻塞 UI 线程
- 不要在 UI 线程之外访问 Android UI 工具包
根据上述单线程模式,要保证应用 UI 的响应能力,关键是不能阻塞 UI 线程。 如果执行的操作不能很快完成,则应确保它们在单独的线程(“后台”或“工作”线程)中运行。
Android 提供了几种途径来从其他线程访问 UI 线程。 以下列出了几种有用的方法:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
Handler
处理来自 UI 线程的消息。当然,最好的解决方案或许是扩展 AsyncTask
类,此类简化了与 UI 进行交互所需执行的工作线程任务。- 安卓学习笔记(八):进程和线程 跟着API指南来学习
- 安卓学习笔记(八):内容提供者 跟着API指南来学习
- 安卓学习笔记(五):任务和返回栈 跟着API指南来学习
- 安卓学习笔记(四):加载器Loaders 跟着API指南来学习
- 安卓学习笔记(六):Overview Screen 概览屏幕 跟着API指南来学习
- 安卓学习笔记(七):服务 跟着API指南来学习
- android 学习笔记(一):Intent 和 Intent 过滤器 跟着API指南来学习
- 安卓学习笔记(二):Activity 跟着API指南学习
- 安卓学习笔记(三):Fragment片段 跟着API指南学习
- 安卓学习笔记(八)、FrameLayout
- Linux 学习笔记(八)周期性进程
- 学习笔记(八)进程与服务
- 跟着官方指南学习TensorFlow(序)
- Android API 指南, 线程和进程
- 官方API指南之进程和线程
- symbian线程和进程学习笔记
- symbian线程和进程学习笔记
- java学习笔记-线程和进程-黑马
- 【unity3d学习笔记】unity中创建全局变量
- codeforces——230A——Dragons
- 排序(4)希尔排序
- c# winform 反射
- error: could not create '/usr/local/lib/python2.7/dist-packages/jieba': Permission denied
- 安卓学习笔记(八):进程和线程 跟着API指南来学习
- STL常用函数(转自TiWalker)
- Js字符串截取函数substring和substr
- php artsian命令大全
- Python-第三方库requests详解
- 畅通路问题之贪婪算法
- 多级队列应用题-2016年408习题
- mysql group by 用法解析
- 笔试题