介绍
Android系统中,主线程即UI线程担负着直接与用户进行交互的任务,保持UI的流畅是对用户体验的最基本要求,这就要求我们不能将费时费力的工作放到主线程中,以免造成界面的卡顿。因此,在后台进行费时操作才是最佳的选择,下面介绍Android系统中进行后台操作的一些方法要点:
一.service
1.创建service
创建完成后,需要在application标签内注册此Service,可加入permission属性来确保Service只能由自己的程序启动和停止。
2.执行Service
重写OnStartCommand方法以执行由Service封装的任务。
应在onStartCommand方法中运行一个新线程在后台执行处理。
onStartCommand的返回值可以控制重新启动的行为。
3.启动和停止
当Service完成操作后,应调用stopSelf终止它。
4.将Service绑定到Activity
要让一个Service支持绑定需要实现onBind方法,并返回被绑定Service的当前实例,当被绑定时,可以通过onServiceConnected获得的serviceBinder对象来使用Service所有的共有方法和属性。
5.创建前台Service
前台Service可以有更高的优先级,可以有效地避免运行时在释放资源时终止这个Service。
当不需要在前台时可调用stopForeground,并可选择是否移除通知。
二.AsyncTask
1.使用AsyncTask运行异步任务
更新组成。
AsyncTask 适合生命周期较短且需要在UI上显示进度结果的后台操作,但在Activity被销毁时会被取消,所以生命周期较长的后台操作应使用Service组件
应重写的方法:
- doInBackground:这个方法在后台线程上执行,所以应把运行时间较长的代码放到这里,不能与UI交互。可以调用publishProgress方法传递参数给onProgressUpdate方法后台任务完成后返回的最终结果作为参数传递给onPostExecute
- onProgressUpdate:当中间进度变化时更新UI,此方法与GUI线程同步
- onPostExecute:当异步任务完成后,doInBackground方法的返回值传入这个方法,用此方法更新UI
运行方法:创建新实例并调用execute方法,可以传入很多参数(每个AsyncTask实例只能执行一次)。
2.IntentService
作用:根据需求执行一组任务,将收到的所有请求Intent放到队列中,并在异步后台线程中逐个处理他们,是Service类的子类,用来处理异步请求。
当处理完每个收到的Intent后,IntentService 会终止自己。
用法:继承IntentService并重写onHandleIntent(Intent)方法
三.手动创建线程和GUI同步的方法
1.直接创建子线程
2.可以使用runOnUiThread方法强制一个方法在UI线程中执行。
3.使用Handler
四.用Alarm实现后台操作
1.Alarm 是一种在某一时间点或一段时间间隔内激活Intent的方式。
2.Alarm 在应用程序之外操作,即使程序关闭也依然能够用来激活程序事件或操作。
3.用set方法指定一个类型,触发时间和一个要激活的PendingIntent可以创建一个只激活一次的Alarm。4.使用setRepeating 或setInexactRepeating 方法设置重复的Alarm。
5.应用:自动刷新等
本文详述了Android系统中进行后台操作的方法,包括Service的创建、启动和停止,如何绑定到Activity,以及创建前台Service。此外,还介绍了使用AsyncTask执行异步任务,以及IntentService和手动创建线程的策略。最后讨论了用Alarm实现后台操作的场景。
2026

被折叠的 条评论
为什么被折叠?



