android Service 的使用
1 Service 簡介
Service 是Android 四大組件之一 一般在后臺(tái)運(yùn)行,無用戶界面,用戶無法看到。
Service主要用于組件之間交互(例如:與Activity、ContentProvider、BroadcastReceiver進(jìn)行交互)、后臺(tái)執(zhí)行耗時(shí)操作等(例如下載文件,播放音樂等,但Service在主線程運(yùn)行時(shí)長不能超過20s,否則會(huì)出現(xiàn)ANR,耗時(shí)操作一般建議在子線程中進(jìn)行操作)。
2 Service 模式
Service啟動(dòng)模式主要分兩種:?1.?啟動(dòng)模式。?2.?綁定模式。
啟動(dòng)模式的生命周期為 StartService--> onCreate---> onStartCommand-->onDestory?
綁定模式的生命周期為 BindService--->onCreate--->onBind--->onUnBind---->onDestory
3 代碼介紹Service的使用
先看下啟動(dòng)服務(wù)
3.1 創(chuàng)建的服務(wù)要繼承Service?
3.2?必須在Androidmainfest.xml 中注冊?
下面看看代碼-----寫一個(gè)簡單的開啟與關(guān)閉服務(wù)
//啟動(dòng)服務(wù)findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, MyService.class);startService(intent);}});//關(guān)閉服務(wù)findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, MyService.class);stopService(intent);}});
然后我們在看看創(chuàng)建的MyService 代碼?
public class MyService extends Service {@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();Log.e("----------服務(wù)創(chuàng)建","111111111111");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.e("----------服務(wù)調(diào)用","111111111111");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {super.onDestroy();Log.e("----------服務(wù)銷毀","111111111111");}
}
代碼里面有一個(gè)onBind 這個(gè)無論是啟動(dòng)服務(wù)還是綁定服務(wù)都會(huì)存在的,在啟動(dòng)服務(wù)里面不用關(guān)返回null就行
在綁定服務(wù)里面可以返回要綁定的內(nèi)容
最后別忘記在配置文件中注冊了
<service android:name=".MyService" />
配置文件的屬性如下
?<service android:name=".Myservice"
? ? ? ? ? ? android:enabled="true"
? ? ? ? ? ? android:exported="true"
? ? ? ? ? ? android:icon="@drawable/background_blue"
? ? ? ? ? ? android:label="string"
? ? ? ? ? ? android:process="string"
? ? ? ? ? ? android:permission="string">
?</service>
android:exported?? ?表示是否允許除了當(dāng)前程序之外的其他程序訪問這個(gè)服務(wù)
android:enabled?? ?表示是否啟用這個(gè)服務(wù)
android:permission?? ?是權(quán)限聲明
android:process?? ?是否需要在單獨(dú)的進(jìn)程中運(yùn)行,當(dāng)設(shè)置為android:process=”:remote”時(shí),代表Service在單獨(dú)的進(jìn)程中運(yùn)行。注意“:”很重要,它的意思是指要在當(dāng)前進(jìn)程名稱前面附加上當(dāng)前的包名,所以“remote”和”:remote”不是同一個(gè)意思,前者的進(jìn)程名稱為:remote,而后者的進(jìn)程名稱為:App-packageName:remote。
android:isolatedProcess??? ?設(shè)置 true 意味著,服務(wù)會(huì)在一個(gè)特殊的進(jìn)程下運(yùn)行,這個(gè)進(jìn)程與系統(tǒng)其他進(jìn)程分開且沒有自己的權(quán)限。與其通信的唯一途徑是通過服務(wù)的API(bind and start)。
綁定服務(wù)
//綁定服務(wù)findViewById(R.id.bind).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, BindService.class);bindService(intent, conn, Service.BIND_AUTO_CREATE);}});//解綁服務(wù)findViewById(R.id.unbind).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {unbindService(conn);}});
bindService 里面有三個(gè)參數(shù) 第三個(gè)是一個(gè)標(biāo)記,個(gè)人理解為綁定看下其代碼
public class MainActivity extends AppCompatActivity {private ServiceConnection conn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {BindService.MyBinder binder = (BindService.MyBinder) service;binder.start();binder.end();}@Overridepublic void onServiceDisconnected(ComponentName name) {}};
}
}
綁定的服務(wù)
public class BindService extends Service {//初始化自定義的Binder對象private MyBinder mBinder = new MyBinder();public class MyBinder extends Binder {public void start() {Log.e("----------start", "start:");}public void end() {Log.e("-----------end", "end:");}}@Overridepublic void onCreate() {super.onCreate();Log.e("------------hxm", "onCreate");}@Nullable@Overridepublic IBinder onBind(Intent intent) {Log.e("------------hxm", "IBinder");return mBinder;}@Overridepublic boolean onUnbind(Intent intent) {Log.e("------------hxm", "onUnbind");return super.onUnbind(intent);}@Overridepublic void onDestroy() {super.onDestroy();Log.e("------------hxm", "onDestroy");}
}
個(gè)人寫一個(gè)demo 點(diǎn)擊查看吧
?
參考文章
https://mp.weixin.qq.com/s?__biz=MzU4MTIzMjM3MA==&mid=2247484827&idx=2&sn=80212d30ef757afccd0e601ce73f14a1&scene=21#wechat_redirect
https://blog.csdn.net/weixin_39460667/article/details/82770164
總結(jié)
以上是生活随笔為你收集整理的android Service 的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java设计模式:单例模式
- 下一篇: Android 动态广播与静态广播