Android后台操作汇总

来源:互联网 发布:锦尚数据 编辑:程序博客网 时间:2024/05/29 02:30

介绍

Android系统中,主线程即UI线程担负着直接与用户进行交互的任务,保持UI的流畅是对用户体验的最基本要求,这就要求我们不能将费时费力的工作放到主线程中,以免造成界面的卡顿。因此,在后台进行费时操作才是最佳的选择,下面介绍Android系统中进行后台操作的一些方法要点:


一.service


1.创建service


要创建一个Service需要创建一个继承Service的类,并重写onCreate和onBind方法。

创建完成后,需要在application标签内注册此Service,可加入permission属性来确保Service只能由自己的程序启动和停止。


2.执行Service


当一个Service通过startService启动时,就会调用onStartCommand方法。
重写OnStartCommand方法以执行由Service封装的任务。
应在onStartCommand方法中运行一个新线程在后台执行处理。
onStartCommand的返回值可以控制重新启动的行为。

3.启动和停止


启动类似Activity的启动,通过调用startService(Intent)方法来启动一个service,停止时调用stopService(Intent)

当Service完成操作后,应调用stopSelf终止它。


4.将Service绑定到Activity


将Service绑定到Activity后后者会维持一个对前者实例的引用,这样能对正在运行的Service进行方法调用

要让一个Service支持绑定需要实现onBind方法,并返回被绑定Service的当前实例,当被绑定时,可以通过onServiceConnected获得的serviceBinder对象来使用Service所有的共有方法和属性。


5.创建前台Service


前台Service可以有更高的优先级,可以有效地避免运行时在释放资源时终止这个Service。


通过调用Service的startForeground方法来实现在前台运行,在调用该方法时要指定一个持续工作的Notification。

当不需要在前台时可调用stopForeground,并可选择是否移除通知。


二.AsyncTask


1.使用AsyncTask运行异步任务


AsyncTask 处理线程创建管理和同步等全部工作,可以用来创建一个异步任务,由在后台的处理以及处理后的UI
更新组成。
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.直接创建子线程


即使用Thread或Runnable创建,比较简单。

2.可以使用runOnUiThread方法强制一个方法在UI线程中执行。


3.使用Handler


使用Handler的post方法可以将更新从后台线程发布到UI线程(创建Handler的线程)上,postDelayed方法延迟发布。
关于使用Hanlder进行异步操作的原理介绍,可以阅读:Handler后台异步更新UI的总结

四.用Alarm实现后台操作


1.Alarm 是一种在某一时间点或一段时间间隔内激活Intent的方式。

2.Alarm 在应用程序之外操作,即使程序关闭也依然能够用来激活程序事件或操作。

3.用set方法指定一个类型,触发时间和一个要激活的PendingIntent可以创建一个只激活一次的Alarm。
4.使用setRepeating 或setInexactRepeating 方法设置重复的Alarm。
5.应用:自动刷新等
0 0
原创粉丝点击