第8章 Service基础Activity与Service绑定
要知道如果調用函數startService方法,那么即使你的程序退出了,但是Service依然運行在后臺;也就是說此時想要停止service必須調用stopService方法。
現在我們把Activity與Service綁定在一起,那就是Service要隨著程序的退出而終止,此時調用的方法為bindService方法,方法如下:
A.?編寫需要運行在后臺的類繼承自android.app.Service。
public class MyService extends Service {
//服務生命周期 創建,開始,銷毀
? /**
? * 創建
? */
?@Override
? public void onCreate() {
?? // TODO Auto-generated method stub
? ?super.onCreate();
?? Log.d("info", "Service Create");
?}
? /*
? * 開始
? * (non-Javadoc)
? * @see android.app.Service#onStart(android.content.Intent, int)
? */
? @Override
? public void onStart(Intent intent, int startId) {
? ?// TODO Auto-generated method stub
? ?super.onStart(intent, startId);
?? Log.d("info", "Service Start");
? }
? /**
? * 銷毀?
? */
? @Override
? public void onDestroy() {
?? // TODO Auto-generated method stub
?? super.onDestroy();
? ?Log.d("info", "Service Destroy");
? }
?
? /**
? * 當Service與Activity成功綁定時調用這個方法(non-Javadoc)
? * @see android.app.Service#onBind(android.content.Intent)
? */
? @Override
? public IBinder onBind(Intent arg0) {
?? Log.d("info","Service Bind Success");
?? return null;
? }
? /**
? * 重新綁定
? */
? @Override
? public void onRebind(Intent intent) {?
? ?super.onRebind(intent);
?? Log.d("info","Service ReBind Success");
? }
? /**
? * 取消綁定
? */
? @Override
? public boolean onUnbind(Intent intent) {
?? Log.d("info","Service Unbind Success");
?? return super.onUnbind(intent);
?? }
? }
?
B.??在AndroidManifest.xml中配置<service>標簽
<service android:name=".MyService" android:enabled="true" ></service>
?
C.?綁定服務:
(1) 通過使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成
???? 由該方法的第二個參數可以確定第二步要做什么
(2) 編寫類實現ServiceConnection 接口
? class MyServiceConnection implements ServiceConnection
??? {
?? @Override
?? public void onServiceConnected(ComponentName arg0, IBinder arg1) {
??? Log.d("info", "Service Connection Success");
?? ?//成功連接服務,該方法被執行。在該方法中可以通過IBinder對象取得onBind方法的返回值,一般通過向下轉型
?? }
? ?@Override
?? public void onServiceDisconnected(ComponentName arg0) {
??? // TODO Auto-generated method stub
? ??Log.d("info", "Service Connection Filed");
?? ?//連接失敗執行
? ?}
??? ?
??? }
(3)使用
???? class BtnClick implements OnClickListener
??? {
????? ?@Override
?? public void onClick(View arg0) {
??? Intent intent = new Intent(Main.this,MyService.class);???
??? MyServiceConnection myServiceConnection = new MyServiceConnection();
??? switch (arg0.getId()) {
?? ?case R.id.btnStart:????????
???? Main.this.startService(intent);
???? break;
??? case R.id.btnStop:????
??? ?Main.this.stopService(intent);
???? break;
??? case R.id.btnBind:
???? ?Main.this.bindService(intent,myServiceConnection?,Context.BIND_AUTO_CREATE);
??? ?break;??
??? case R.id.btnUnBind:
???? //ServiceConnection必須是全局變量否則此處報錯
???? Main.this.unbindService(myServiceConnection?);
???? break;
?? ?default:
? ? break;
?? ?}???
? ? }
??? ?
??? }
?
***開啟service有兩種方法,一種startService,另一種是bindService。如果兩種方法同時使用的話,不論是先啟用startService先還是啟用bindService先,都需要先等待解除綁定服務再能調用stopService方法,程序才會自動回調destroy。不論是先啟用startService先還是啟用bindService先,然后再退出程序,以startService啟動的服務忍然需要當程序再次啟動后調用stopService停止服務。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的第8章 Service基础Activity与Service绑定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到小乌龟是什么预兆
- 下一篇: '800a0005' 图片上传出现写入文