日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第8章 Service基础Activity与Service绑定

發(fā)布時(shí)間:2023/11/29 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第8章 Service基础Activity与Service绑定 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

    要知道如果調(diào)用函數(shù)startService方法,那么即使你的程序退出了,但是Service依然運(yùn)行在后臺(tái);也就是說此時(shí)想要停止service必須調(diào)用stopService方法。

    現(xiàn)在我們把Activity與Service綁定在一起,那就是Service要隨著程序的退出而終止,此時(shí)調(diào)用的方法為bindService方法,方法如下:

    A.?編寫需要運(yùn)行在后臺(tái)的類繼承自android.app.Service。

      public class MyService extends Service {

        //服務(wù)生命周期 創(chuàng)建,開始,銷毀
?        /**
?           * 創(chuàng)建
?         */
        ?@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");
?          }

?

?          /**
?             * 當(dāng)Service與Activity成功綁定時(shí)調(diào)用這個(gè)方法(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>標(biāo)簽

      <service android:name=".MyService" android:enabled="true" ></service>

?

    

    C.?綁定服務(wù):

      (1) 通過使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成

????       由該方法的第二個(gè)參數(shù)可以確定第二步要做什么

      (2) 編寫類實(shí)現(xiàn)ServiceConnection 接口

?         class MyServiceConnection implements ServiceConnection
???         {

??          @Override
??          public void onServiceConnected(ComponentName arg0, IBinder arg1) {
???          Log.d("info", "Service Connection Success");
??          ?//成功連接服務(wù),該方法被執(zhí)行。在該方法中可以通過IBinder對(duì)象取得onBind方法的返回值,一般通過向下轉(zhuǎn)型

??          }

?          ?@Override
??          public void onServiceDisconnected(ComponentName arg0) {
???          // TODO Auto-generated method stub
?          ??Log.d("info", "Service Connection Filed");
??          ?//連接失敗執(zhí)行
?          ?}
??? ?
???       }

        (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必須是全局變量否則此處報(bào)錯(cuò)
????               Main.this.unbindService(myServiceConnection?);
????                break;
??            ?default:
? ?                break;
??            ?}???
?        ?  }
??? ?
???         }

?

***開啟service有兩種方法,一種startService,另一種是bindService。如果兩種方法同時(shí)使用的話,不論是先啟用startService先還是啟用bindService先,都需要先等待解除綁定服務(wù)再能調(diào)用stopService方法,程序才會(huì)自動(dòng)回調(diào)destroy。不論是先啟用startService先還是啟用bindService先,然后再退出程序,以startService啟動(dòng)的服務(wù)忍然需要當(dāng)程序再次啟動(dòng)后調(diào)用stopService停止服務(wù)。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的第8章 Service基础Activity与Service绑定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。