Service

注意:

  • 運行在主線程,不能用于做耗時請求和操作,
  • 可以開啟一個線程,在線程中做耗時操作。

啟動本地服務(wù):start和Bind方式。
生命周期:左邊為start方式,右邊為Bind方式

Service生命周期

特點:

  • start方式:服務(wù)跟啟動源沒有任何聯(lián)系,無法得到服務(wù)對象,注意啟動后只會調(diào)用一次onStartCommand()方法
  • Bind方式:通過Ibinder接口實例,返回一個ServiceConnection對象給啟動源,通過ServiceConnection對象的相關(guān)方法可以得到Service對象
  1. start方式
    ①新建類MyStartService繼承自Service,實現(xiàn)onCreate(),onStartCommand(),onDestroy()方法
    ②用Intent啟動和停止服務(wù)
啟動服務(wù)
Intent intent1=new Intent(MainActivity.this,MyStartService.class);
startService(intent1);
停止服務(wù)
stopService(intent1);

③ 在AndroidManifest注冊其權(quán)限,加在application標(biāo)簽中

<service android:name=".MyStartService"></service>
  1. Bind方式
    eg:實現(xiàn)暫停,播放功能
    ①用IBinder對象
在繼承自Service的MyBinderService類
public class MyBinder extends Binder{
    public MyBinderService getService(){
               return MyBindService.this;
}
}

②新建MyBinderService類繼承Service,實現(xiàn)onCreate(),onBind(),onUnbind(),onDestory()方法
寫pause(),play()方法

public IBinder onBind(){
   return new MyBinder();
}

③ 在主方法ServiceConnection()方法中得到MyBinderService實例

ServiceConnection conn=new ServiceConnection(){
//當(dāng)啟動源和Service成功連接時調(diào)用
    public void onServiceConnected(ComponentName componentName,IBinder binder ){
        MyBinderService service=((MyBinderService.MyBinder).IBinder).getService();
    }
//當(dāng)啟動源和Service意外丟失時調(diào)用
    public void onServiceDisconnected(ComponentName componentName) {}
}

④ 綁定和解綁定服務(wù)

綁定
Intent intent2=new Intent(MainActivity.this,MyBinderService.class);
bindService(intent2,conn,BIND_AUTO_CRERTA);
解綁
unbindService(conn);

⑤ 開啟服務(wù)

service.pause();
service.play();

⑥注冊權(quán)限,在application中注冊

<service android:name=".MyBinderService"></service>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容