android Service 的使用
1 Service 簡介
Service 是Android 四大組件之一 一般在后臺運行,無用戶界面,用戶無法看到。
Service主要用于組件之間交互(例如:與Activity、ContentProvider、BroadcastReceiver進行交互)、后臺執(zhí)行耗時操作等(例如下載文件,播放音樂等,但Service在主線程運行時長不能超過20s,否則會出現(xiàn)ANR,耗時操作一般建議在子線程中進行操作)。
2 Service 模式
Service啟動模式主要分兩種:?1.?啟動模式。?2.?綁定模式。
啟動模式的生命周期為 StartService--> onCreate---> onStartCommand-->onDestory?
綁定模式的生命周期為 BindService--->onCreate--->onBind--->onUnBind---->onDestory
3 代碼介紹Service的使用
先看下啟動服務(wù)
3.1 創(chuàng)建的服務(wù)要繼承Service?
3.2?必須在Androidmainfest.xml 中注冊?
下面看看代碼-----寫一個簡單的開啟與關(guān)閉服務(wù)
//啟動服務(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");}
}
代碼里面有一個onBind 這個無論是啟動服務(wù)還是綁定服務(wù)都會存在的,在啟動服務(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)前程序之外的其他程序訪問這個服務(wù)
android:enabled?? ?表示是否啟用這個服務(wù)
android:permission?? ?是權(quán)限聲明
android:process?? ?是否需要在單獨的進程中運行,當(dāng)設(shè)置為android:process=”:remote”時,代表Service在單獨的進程中運行。注意“:”很重要,它的意思是指要在當(dāng)前進程名稱前面附加上當(dāng)前的包名,所以“remote”和”:remote”不是同一個意思,前者的進程名稱為:remote,而后者的進程名稱為:App-packageName:remote。
android:isolatedProcess??? ?設(shè)置 true 意味著,服務(wù)會在一個特殊的進程下運行,這個進程與系統(tǒng)其他進程分開且沒有自己的權(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 里面有三個參數(shù) 第三個是一個標(biāo)記,個人理解為綁定看下其代碼
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");}
}
個人寫一個demo 點擊查看吧
?
參考文章
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 动态广播与静态广播