Android基础

Android四大组件之Service

2017-11-05  本文已影响0人  AndryYu

通过总结,记录在android开发中,使用Service需要注意的点:

  1. Service两种启动方式和声明周期
  2. IntentService使用
  3. Service更新UI方法

Service两种启动方式和声明周期

Service声明周期
第一种方式:通过StartService启动Service

通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁。

以上几个方法都是回调方法,且在主线程中执行,由android操作系统在合适的时机调用。

Service的onStartCommand()方法的返回值

第二种方式:通过BindService启动Service

bindService启动服务的生命周期与其绑定的client息息相关。当client销毁时,client会自动与Service解除绑定。当然,client也可以明确调用Context的unbindService()方法与Service解除绑定。当没有任何client与Service绑定时,Service会自行销毁。

public class TestService extends Service{

    //client 可以通过Binder获取Service实例
    public class MyBinder extends Binder {
        public TestService getService() {
            return TestTwoService.this;
        }
    }

    //通过binder实现调用者client与Service之间的通信
    private MyBinder binder = new MyBinder();

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_NOT_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return false;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

IntentService的使用

IntentService在它的onCreate()函数中通过实例化了一个HandlerThread开启一个线程来处理所有Intent请求对象所对应的任务。IntentService在处理任务时,还是采用Handler+Message的方式,创建一个名叫ServiceHandler的Handler对象,并把它直接绑定到HandlerThread所对应的子线程。ServiceHandler把处理intent所对应的任务都封装到onHandleIntent函数里。因此如果我们需要处理自己的任务,直接实现onHandleIntent方法,再在里面根据Intent的不同进行不同的处理就可以了。

Service更新UI方法

上一篇下一篇

猜你喜欢

热点阅读