文章出處

創建MyService類

創建一個MyService類繼承與Service:

public class MyService extends Service {
    @Override
    public void onCreate() {
        Log.i(getClass().getSimpleName(),"onCreate");
        super.onCreate();
    }

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

    @Override
    public void onDestroy() {
        Log.i(getClass().getSimpleName(),"onDestory");
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        Log.i(getClass().getSimpleName(),"onBind");
        return new MyBinder();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.i(getClass().getSimpleName(),"onUnbind");
        return super.onUnbind(intent);
    }

    public class MyBinder extends Binder{
        MyService getService(){
            return MyService.this;
        }
    }
}

綁定和開啟MyService

startService和binderService:

public class MainActivity extends Activity implements View.OnClickListener {

    private ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myService = ((MyService.MyBinder)service).getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
    private MyService myService;
    private Intent intent;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btn1).setOnClickListener(this);
        findViewById(R.id.btn2).setOnClickListener(this);
        findViewById(R.id.btn3).setOnClickListener(this);
        findViewById(R.id.btn4).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        intent = new Intent(MainActivity.this,MyService.class);
        switch (view.getId()) {
            case R.id.btn1:
                startService(intent);
                break;
            case R.id.btn2:
                bindService(intent,conn,BIND_AUTO_CREATE);
                break;
            case R.id.btn3:
                stopService(intent);
                break;
            case R.id.btn4:
                unbindService(conn);
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        stopService(intent);
        unbindService(conn);
    }
}

  1. startService ===>bindService ==>stopService ==>unbindService;

    stopService并沒有調用Service中的任何方法,因為bindService還沒有與MyService取消綁定
  2. bindService ==>startService ==>stopService ==>unbindService

    stop依舊沒有調用Service中的方法;
  3. startService ==>bindService ==>unbindService ==>stopService

    到這一步我們可以知道,最后與Service解除綁定/停止服務的那個方法,才會執行onDestory,

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()