最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android  Service類與生命周期詳細介紹

 更新時間:2017年03月07日 09:14:51   投稿:lqh  
這篇文章主要介紹了Android Service類與生命周期詳細介紹的相關資料,需要的朋友可以參考下

Android  Service類與生命周期

Service是Android四大組件與Activity最相似的組件,都代表可執(zhí)行的程序,區(qū)別在于Service一直在后臺運行且沒有用戶界面。

1.Service的類圖和生命周期

先來看看Service的類圖:

這里寫圖片描述

接下來看看Service的生命周期:

這里寫圖片描述

2.開發(fā)Service

(1)開發(fā)Service需要兩步:

第1步:定義子類,繼承Service
第2步:在AndroidManifest.xml文件中配置Service

(2)創(chuàng)建Service

public class MyService extends Service {
  // 必須實現(xiàn),綁定該Service時被回調
  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }
  // Service被創(chuàng)建時回調
  @Override
  public void onCreate() {
    super.onCreate();
    // 定義相關業(yè)務邏輯
    System.out.println("Service is Created");
  }
  // Service被啟動時回調
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    // 定義相關業(yè)務邏輯
    System.out.println("Service is Started");
    return START_STICKY;
  }
  // Service被關閉之前回調
  @Override
  public void onDestroy() {
    super.onDestroy();
    System.out.println("Service is Destroyed");
  }
}

(3)配置Service

<application
  ...
  <!-- 配置一個Service組件 -->
  <service android:name=".MyService">
    <intent-filter>
      <!-- 為該Service組件的intent-filter配置action -->
      <action android:name="com.gc.service.MY_SERVICE" />
    </intent-filter>
  </service>
</application>

接下來就可以運行Service了。

(4)啟動和停止Service(一般方式)

// 創(chuàng)建啟動Service的Intent
final Intent intent = new Intent();
// 為Intent設置Action屬性
intent.setAction("com.gc.service.MY_SERVICE");
...
// 啟動指定Serivce
startService(intent);
...
// 停止指定Serivce
stopService(intent);

當程序使用startService()、stopService()啟動、關閉Service時,Service與訪問者之間無法進行通信、數(shù)據(jù)交換,故下面介紹另一種方式啟動和停止Service。

(5)啟動和停止Service(綁定Service并與之通信)

如果Service和訪問者之間需要進行方法調用或數(shù)據(jù)交換,則應該使用bindService()和unbindService()方法啟動、停止Service。

bindService(Intent intent, ServiceConnection conn, int flags),三個參數(shù)如下:

intent:指定要啟動的Service

conn:用于監(jiān)聽訪問者與Service之間的連接情況,當訪問者與Service之間連接成功時將回調該ServiceConnection對象的onServiceConnected(ComponentName name, IBinder service)方法;反之回調該ServiceConnection對象的onServiceDisconnected(ComponentName name)方法(主動調用unbindService方法斷開連接時則不回調)

flags:指定綁定時是否創(chuàng)建Service,0:不自動創(chuàng)建;BIND_AUTO_CREATE:自動創(chuàng)建

注意:ServiceConnection對象的onServiceConnected方法中有一個IBinder對象,該對象即可實現(xiàn)與綁定Service之間的通信。
在綁定本地Service的情況下,onBind(Intent intent)方法所返回的IBinder對象將會傳給ServiceConnection對象里onServiceConnected(ComponentName name, IBinder service)方法的service參數(shù),這樣訪問者就可以通過該IBinder對象與Service進行通信。

實際開發(fā)通常會采用繼承Binder(IBinder的實現(xiàn)類)的方式實現(xiàn)自己的IBinder對象。

public class MyService extends Service {
  private int count;
  // 定義onBinder方法所返回的對象
  private MyBinder binder = new MyBinder();

  // 通過繼承Binder來實現(xiàn)IBinder類
  public class MyBinder extends Binder {
    public int getCount() {
      return count; // 獲取Service的運行狀態(tài)
    }
  }
  // 必須實現(xiàn),綁定該Service時被回調
  @Override
  public IBinder onBind(Intent intent) {
    System.out.println("Service is Binded");
    return binder; // 返回IBinder對象
  }
  // Service被創(chuàng)建時回調
  @Override
  public void onCreate() {
    super.onCreate();
    System.out.println("Service is Created");
    count = 100;
  }
  // Service被斷開連接時回調
  @Override
  public boolean onUnbind(Intent intent) {
    System.out.println("Service is Unbinded");
    return true;
  }
  // Service被關閉之前回調
  @Override
  public void onDestroy() {
    super.onDestroy();
    System.out.println("Service is Destroyed");
  }
}

接下來定義一個Activity來綁定該Service,并在該Activity中通過MyBinder對象訪問Service的內部狀態(tài)。

在該Activity綁定該Service后,該Activity還可以通過MyBinder對象來獲取Service的運行狀態(tài)。對于Service的onBind(Intent intent)方法返回的IBinder對象來說,Service允許客戶端通過該IBinder對象來訪問Service內部的數(shù)據(jù),這樣即可實現(xiàn)客戶端與Service之間的通信。

public class MyServiceTest extends Activity {
  // Service的IBinder對象
  MyService.MyBinder binder;

  // 定義一個ServiceConnection對象
  private ServiceConnection conn = new ServiceConnection() {
    // 當該Activity與Service連接成功時回調
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
      // 獲取Service的onBind方法所返回的MyBinder對象
      binder = (MyService.MyBinder) service;
    }
    // 當該Activity與Service斷開連接時回調
    @Override
    public void onServiceDisconnected(ComponentName name) {
    }
  };

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ...
    // 創(chuàng)建啟動Service的Intent
    final Intent intent = new Intent();
    // 為Intent設置Action屬性
    intent.setAction("com.gc.service.MY_SERVICE");
    // 綁定指定Serivce
    bindService(intent, conn, Service.BIND_AUTO_CREATE);
    ...
    binder.getCount(); // 獲取Serivce的count值
    ...   
    // 解除綁定Serivce
    unbindService(conn);
  }
}


感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Android WebView組件用法詳解

    Android WebView組件用法詳解

    這篇文章主要介紹了Android WebView組件用法,結合實例形式詳細分析了Android WebView組件的功能、權限設置、布局及使用技巧,需要的朋友可以參考下
    2016-02-02
  • Android自定義帶進度條WebView仿微信加載過程

    Android自定義帶進度條WebView仿微信加載過程

    這篇文章主要為大家詳細介紹了Android自定義帶進度條WebView仿微信加載過程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Android 3D滑動菜單完全解析 Android實現(xiàn)推拉門式的立體特效

    Android 3D滑動菜單完全解析 Android實現(xiàn)推拉門式的立體特效

    這篇文章主要為大家詳細介紹了Android 3D滑動菜單,Android實現(xiàn)推拉門式的立體特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android之頭像圖片變圓形顯示

    Android之頭像圖片變圓形顯示

    本文主要介紹了Android中頭像圖片變圓形的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Android 實現(xiàn)加載大圖片的方法

    Android 實現(xiàn)加載大圖片的方法

    對于超大的圖片,如果不縮放的話,容易導致內存溢出。而經(jīng)過處理后,無論多大的圖片,都能夠在手機屏幕上加載出來,不會導致內存溢出。本文將對Android 加載大圖片的實現(xiàn)方法進行介紹,下面跟著小編一起來看下吧
    2017-04-04
  • Android高級UI特效仿直播點贊動畫效果

    Android高級UI特效仿直播點贊動畫效果

    這篇文章主要介紹了Android高級UI特效仿直播點贊動畫效果,最近比較火的抖音快手直播視頻都有這樣的效果,下面腳本之家小編給大家?guī)韆ndroid 仿直播點贊效果的實現(xiàn)代碼,需要的朋友參考下吧
    2018-03-03
  • 淺析Android中常見三種彈框在項目中的應用

    淺析Android中常見三種彈框在項目中的應用

    這篇文章主要介紹了淺析Android中常見三種彈框在項目中的應用,需要的朋友可以參考下
    2017-03-03
  • 詳解Java編程中的反射在Android開發(fā)中的應用

    詳解Java編程中的反射在Android開發(fā)中的應用

    這篇文章主要介紹了詳解Java編程中的反射在Android開發(fā)中的應用,主要來獲取安卓系統(tǒng)的屬性值,需要的朋友可以參考下
    2015-07-07
  • Android中Fragment管理及重疊問題的解決方法

    Android中Fragment管理及重疊問題的解決方法

    最近做項目碰到了Fragment重疊的問題,后來通過種種方法得以解決了,所以想著總結下這個問題的解決方法,以及Android中Fragment的管理,方便自己也給有需要的朋友們提供以幫助,感興趣的朋友們下面通過這篇文章一起來學習學習吧
    2016-11-11
  • 教你輕松制作Android音樂播放器

    教你輕松制作Android音樂播放器

    這篇文章主要教大家輕松制作Android音樂播放器,制作一款屬于自己的Android音樂播放器,希望大家喜歡。
    2015-11-11

最新評論

罗源县| 祁门县| 合江县| 文登市| 开封市| 宜阳县| 沈丘县| 汽车| 瓮安县| 汶上县| 郑州市| 建平县| 大庆市| 白银市| 西城区| 庆云县| 繁峙县| 新建县| 芜湖县| 无为县| 乌兰浩特市| 高邑县| 长垣县| 南皮县| 长沙县| 应城市| 罗甸县| 新乡市| 宝兴县| 易门县| 吉水县| 石嘴山市| 绥中县| 鹿泉市| 邹城市| 泾川县| 玛纳斯县| 肥东县| 榆中县| 察哈| 临湘市|