android Service 的使用
1 Service 簡介
Service 是Android 四大組件之一 一般在后臺運行,無用戶界面,用戶無法看到。
Service主要用于組件之間交互(例如:與Activity、ContentProvider、BroadcastReceiver進行交互)、后臺執行耗時操作等(例如下載文件,播放音樂等,但Service在主線程運行時長不能超過20s,否則會出現ANR,耗時操作一般建議在子線程中進行操作)。
2 Service 模式
Service啟動模式主要分兩種:?1.?啟動模式。?2.?綁定模式。
啟動模式的生命周期為 StartService--> onCreate---> onStartCommand-->onDestory?
綁定模式的生命周期為 BindService--->onCreate--->onBind--->onUnBind---->onDestory
3 代碼介紹Service的使用
先看下啟動服務
3.1 創建的服務要繼承Service?
3.2?必須在Androidmainfest.xml 中注冊?
下面看看代碼-----寫一個簡單的開啟與關閉服務
//啟動服務findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, MyService.class);startService(intent);}});//關閉服務findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, MyService.class);stopService(intent);}});
然后我們在看看創建的MyService 代碼?
public class MyService extends Service {@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();Log.e("----------服務創建","111111111111");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.e("----------服務調用","111111111111");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {super.onDestroy();Log.e("----------服務銷毀","111111111111");}
}
代碼里面有一個onBind 這個無論是啟動服務還是綁定服務都會存在的,在啟動服務里面不用關返回null就行
在綁定服務里面可以返回要綁定的內容
最后別忘記在配置文件中注冊了
<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?? ?表示是否允許除了當前程序之外的其他程序訪問這個服務
android:enabled?? ?表示是否啟用這個服務
android:permission?? ?是權限聲明
android:process?? ?是否需要在單獨的進程中運行,當設置為android:process=”:remote”時,代表Service在單獨的進程中運行。注意“:”很重要,它的意思是指要在當前進程名稱前面附加上當前的包名,所以“remote”和”:remote”不是同一個意思,前者的進程名稱為:remote,而后者的進程名稱為:App-packageName:remote。
android:isolatedProcess??? ?設置 true 意味著,服務會在一個特殊的進程下運行,這個進程與系統其他進程分開且沒有自己的權限。與其通信的唯一途徑是通過服務的API(bind and start)。
綁定服務
//綁定服務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);}});//解綁服務findViewById(R.id.unbind).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {unbindService(conn);}});
bindService 里面有三個參數 第三個是一個標記,個人理解為綁定看下其代碼
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) {}};
}
}
綁定的服務
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
總結
以上是生活随笔為你收集整理的android Service 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java设计模式:单例模式
- 下一篇: 戴隐形眼镜可以滴普通的眼药水吗