Android Service详解-启动方式

Android Service详解-启动方式

startService()

使用此方法启动 Service,Service 与调用者无直接关联,即调用者关闭,Service 也不会关闭,不可调用 Service 方法

onCreate() -> onStartCommand() -> onDestroy();

使用 Context.startService() 方法启动 Service , 首次创建会执行 onCreate() 方法,然后调用 onStartCommand() 方法,服务创建后会一直处于运行状态,每个服务只有一个实例,当再次该服务时,会重复调用 onStartCommand() 方法,但不会调用 onCreate() 方法,当调用了 stopService() 或者 stopSelf() 时, 会执行 onDestroy() 方法停止服务

Service 代码

public class MyService extends Service {

      @Override
      public void onCreate() {
          super.onCreate();
      }

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

      @Override
      public void onDestroy() {
          super.onDestroy();
      }

      @Nullable
      @Override
      public IBinder onBind(Intent intent) {
          return null;
      }
  }

Activity 代码

public class MainActivity extends Activity {
    private Button mBtn_Main;
    private static final String TAG = "MainActivity";

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

        mBtn_Main = findViewById(R.id.btn_main);
        mBtn_Main.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MyService.class);
                startService(intent);
            }
        });
    }
}

bindService()

使用此方法启动 Service,Service 与调用者有直接关联,即调用者关闭,Service 也会关闭,可调用 Service 方法,一般使用此方式用于和 Activity 进行通信

onCreate() -> onBind() -> onUnbind() -> onDestroy();

使用 Context.bindService() 方法启动 Service , 首次创建会执行 onCreate() 方法,然后调用 onBind(),这时调用者已经和 Service 绑定到一起,如调用者关闭,Service 会执行 onUnbind() 方法,然后执行 onDestroy() 方法,如服务已经绑定,再次调用不会执行绑定方法(即不会执行 onCreate() 和 onBind() 方法),如果想要解除绑定,可执行 unbindService() 方法,Service 会执行 onUnbind() 方法,然后执行 onDestroy() 方法关闭服务

Service 代码

public class MyService extends Service {

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

    private MyBinder myBinder = new MyBinder();

    @Override
    public void onCreate() {
        super.onCreate();
    }


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return myBinder;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

Activity 代码

public class MainActivity extends Activity {
    private Button mBtn_Main;
    private static final String TAG = "MainActivity";

    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder binder) {
            MyService.MyBinder myBinder = (MyService.MyBinder) binder;
            MyService myService = myBinder.getMyService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.d(TAG, "onServiceDisconnected: ");
        }
    };

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

        mBtn_Main = findViewById(R.id.btn_main);
        mBtn_Main.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MyService.class);
                bindService(intent, serviceConnection, BIND_AUTO_CREATE);
            }
        });
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值