Android-Service生命周期


MyService重寫的方法:

public class MyService extends Service {

    private final static String TAG = MyService.class.getSimpleName();

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate()...");
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Log.d(TAG, "onStart()...");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand()...");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent intent) {
        Log.d(TAG, "onBind()...");
        return null;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.d(TAG, "onUnbind()...");
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy()...");
    }
}

 MainActivity調用Service方法

  public void startService(View view) {
        startService(new Intent(this, MyService.class));
    }

    public void stopService(View view) {
        stopService(new Intent(this, MyService.class));
    }

    public void bindService(View view) {
        bindService(new Intent(MainActivity.this, MyService.class), connection, Context.BIND_AUTO_CREATE);
    }

    public void unBindService(View view) {
        unbindService(connection);
    }

    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
    };

    public void startMainActivity2(View view) {
        startActivity(new Intent(this, MainActivity2.class));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(connection);
    }

 

startService  stopService

第一次startService:

12-06 19:38:49.693 1958-1958/liudeli.service1 D/MyService: onCreate()...
12-06 19:38:49.693 1958-1958/liudeli.service1 D/MyService: onStartCommand()...
12-06 19:38:49.693 1958-1958/liudeli.service1 D/MyService: onStart()...

 

第二次startService:

12-06 19:38:55.433 1958-1958/liudeli.service1 D/MyService: onStartCommand()...
12-06 19:38:55.433 1958-1958/liudeli.service1 D/MyService: onStart()...

 

去點擊stopService:

12-06 19:43:24.658 1958-1958/liudeli.service1 D/MyService: onDestroy()...

 

startService后:

 

 

bindService  unBindService

bindService,多次點擊bindService,只會出現一次:

12-06 19:49:27.800 1958-1958/liudeli.service1 D/MyService: onCreate()...
12-06 19:49:27.801 1958-1958/liudeli.service1 D/MyService: onBind()...

 

unBindService,點擊unBindService,會執行:

12-06 20:47:58.903 4112-4112/liudeli.service1 D/MyService: onUnbind()...
12-06 20:47:58.903 4112-4112/liudeli.service1 D/MyService: onDestroy()...

 

startService  stopService    bindService  unBindService

點擊startService:  

12-06 20:49:03.637 4235-4235/liudeli.service1 D/MyService: onCreate()...
12-06 20:49:03.638 4235-4235/liudeli.service1 D/MyService: onStartCommand()...
12-06 20:49:03.638 4235-4235/liudeli.service1 D/MyService: onStart()...

 

點擊bindService:

12-06 20:49:08.867 4235-4235/liudeli.service1 D/MyService: onBind()...

 

點擊unBindService:

12-06 20:49:32.640 4235-4235/liudeli.service1 D/MyService: onUnbind()...

 

點擊stopService:

12-06 20:49:35.351 4235-4235/liudeli.service1 D/MyService: onDestroy()...

 

注意:Service是單例方式,onCreate()  onDestroy() 只會創建一次

     Service中是沒有onStop()方法

     Service中的只能由別人調用啟動,Service自己不能啟動

     Service中停止可以由別人調用stopService,Service自己也可以調用stopSelf();

     bindService不會在手機系統中顯示運行服務

   startService會在手機系統中顯示運行服務

     bindService是與Activity同生共死的,在界面結束后需要調用:Activity-->onDestroy(unBindService),AActivity綁定服務后只能AActivity解綁服務

     startService是與Activity無關的,是在后台服務長時間運行的,AActivity啟動的服務,可以用BActivity來停止服務

   服務的特點是:在后台長時間的運行,不能直接的去執行耗時操作,需要通過異步方式去執行耗時操作,可以把Service想象成沒有界面的Activity,區別是服務在后台長時間運行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM