歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android開發教程:Service的簡介和啟動方式

Android開發教程:Service的簡介和啟動方式

日期:2017/3/1 10:36:40   编辑:Linux編程

一.Service的簡介

1.Service介紹和作用 Service是Android系統中的四大組件之一,它是一種長生命周期的,沒有可視化界面,運行於後台的一種服務程序。比如我們播放音樂的時候,有可能想邊聽音樂邊干些其他事情,當退出播放音樂的應用,如果不用Service,我 們就聽不到歌了,所以這時候就得用到Service了。 2.Service生命周期 Service的生命周期並不像Activity那麼復雜,它只繼承了onCreate(),onStart(),onDestroy()三個方法,當第一次啟動Service時,先後調用了onCreate(),onStart()這兩個方法,當停止Service時,則執行onDestroy()方法,這裡需要注意的是,如果Service已經啟動了,當我們再次啟動Service時,不會在執行onCreate()方法,而是直接執行onStart()方法。 二.Service的啟動方式 Service的有兩種啟動方式:Context.startService()和Context.bindService(),這兩種方式對Service生命周期的影響是不同的。 1.Context.startService()方式啟動 ①Context.startService()方式的生命周期:
啟動時,startService –> onCreate() –> onStart()
停止時,stopService –> onDestroy() 如果調用者直接退出而沒有停止Service,則Service 會一直在後台運行 Context.startService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStart()方法。如果調用startService()方法前服務已經被創建,多次調用startService()方法並不會導致多次創建服務,但會導致多次調用onStart()方法。采用startService()方法啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。 ②Context.startService()方式啟動 Service的方法: 下面是具體例子: MainActivity.java
  1. package com.android.service.activity;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. public class MainActivity extends Activity
  9. {
  10. private Button startBtn;
  11. private Button stopBtn;
  12. @Override
  13. public void onCreate(Bundle savedInstanceState)
  14. {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. startBtn = (Button) findViewById(R.id.startBtn);
  18. stopBtn = (Button) findViewById(R.id.stopBtn);
  19. //添加監聽器
  20. startBtn.setOnClickListener(listener);
  21. stopBtn.setOnClickListener(listener);
  22. }
  23. //啟動監聽器
  24. private OnClickListener listener=new OnClickListener()
  25. {
  26. @Override
  27. public void onClick(View v)
  28. {
  29. Intent intent=new Intent(MainActivity.this, ServiceDemo.class);
  30. switch (v.getId())
  31. {
  32. case R.id.startBtn:
  33. startService(intent);
  34. break;
  35. case R.id.stopBtn:
  36. stopService(intent);
  37. break;
  38. default:
  39. break;
  40. }
  41. }
  42. };
  43. }
ServiceDemo.java
  1. package com.android.service.activity;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.os.IBinder;
  5. import android.util.Log;
  6. public class ServiceDemo extends Service
  7. {
  8. private static final String TAG="Test";
  9. @Override
  10. //Service時被調用
  11. public void onCreate()
  12. {
  13. Log.i(TAG, "Service onCreate--->");
  14. super.onCreate();
  15. }
  16. @Override
  17. //當調用者使用startService()方法啟動Service時,該方法被調用
  18. public void onStart(Intent intent, int startId)
  19. {
  20. Log.i(TAG, "Service onStart--->");
  21. super.onStart(intent, startId);
  22. }
  23. @Override
  24. //當Service不在使用時調用
  25. public void onDestroy()
  26. {
  27. Log.i(TAG, "Service onDestroy--->");
  28. super.onDestroy();
  29. }
  30. @Override
  31. //當使用startService()方法啟動Service時,方法體內只需寫return null
  32. public IBinder onBind(Intent intent)
  33. {
  34. return null;
  35. }
  36. }
Copyright © Linux教程網 All Rights Reserved