Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中Service生命周期

Android中Service生命周期

編輯:關於Android編程

這幾天面試的時候,反復被問到一個關於Service的問題。   之前做了一個APP。有一個應用場景是,需要開機啟動一個Service,在Service中另開一個線程,去對比用戶配置中的時間,作出及時提醒。   然後面試的時候在描述該做法時就被問到一個問題,如果Service被系統或者其他應用kill了怎麼辦?我當時的回答是,在onDestroy中去處理。面試官說,onDestroy並不會被調用。   面試的詳情暫且不表,在後期會專門寫面經。現在討論這個問題,Service被kill後生命周期是怎樣的。   OK,用代碼說話。   1,新建一個項目,項目中有一個Activity,一個Service。在Activity的button的監聽處理中去開啟這個Service   MainActivity.java   package com.zhenghuiy.killedservicelifecycletest;   import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;   public class MainActivity extends Activity implements OnClickListener{     private Button startServiceBtn;           @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         initViews();     }       private void initViews() {         startServiceBtn = (Button) findViewById(R.id.startService);         startServiceBtn.setOnClickListener(this);     }       @Override     public void onClick(View view) {         if(view.getId() == R.id.startService){             Intent intent = new Intent();             intent.setClass(this, MyService.class);             this.startService(intent);         }                             }     }          2,重寫Service的大部分函數,具體看注釋   MyService.java     package com.zhenghuiy.killedservicelifecycletest;   import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log;   public class MyService extends Service implements Runnable{     /*      * Service當以bindService的形式調用時,會調用onBind      * 當以startService,則調用onStartCommand      * 另外,onBind是一個抽象函數,必須重寫      * */           @Override     public int onStartCommand(Intent intent, int flags, int startId) {         showLog("onStartCommand is called");                   //Service運行在UI主線程,為了避免因堵塞而被關閉,另開一個線程         new Thread(this).start();                         return super.onStartCommand(intent, flags, startId);     }       @Override     public IBinder onBind(Intent itent) {         showLog("onBind is called");         return null;     }       @Override     public void onCreate() {         super.onCreate();         showLog("onCreate is called");     }       @Override     public void onDestroy() {         super.onDestroy();         showLog("onDestroy is called");     }       /*      * onStart方法已經過時      * 在2.0之後的版本使用onStartCommand      * */     @Override     @Deprecated     public void onStart(Intent intent, int startId) {         super.onStart(intent, startId);         showLog("onStart is called,the Intent action is"+intent.getAction());     }       @Override     public void onTaskRemoved(Intent rootIntent) {         super.onTaskRemoved(rootIntent);         showLog("onTaskRemoved is called,the Intent action is"+rootIntent.getAction());     }       @Override     public void onTrimMemory(int level) {         super.onTrimMemory(level);         showLog("onTrimMemory is called,the level is"+level);     }           private void showLog(String text){         Log.v(this.getClass().getName(),text);     }       @Override     public void run() {         while(true){}           } }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved