Android基础知识之 - Service基础
本篇博客其实是Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务的加工版本,但添加了自己的思考
本篇博客的Service基础知识包括:Service后台服务、前台服务、IntentService、跨进程服务、系统服务
1.1 Service后台服务
Service后台服务有两种启动方式,startSevice()和bindService(),bindService可以返回一个代理对象,可以调用Service中的方法和获取返回结果等操作,而startService方式启动的Service一旦被启动就与所启动的Activity和BroadCast没有了任何关系,更不能和它们进行交互
1.1.1 不可交互的后台服务
当我们通过startService来启动服务的时候,所启动的Service就不能不可交互的后台服务
它的生命周期分别为onCreate、onStartCommond、onDestroy:
当我们首次startService的时候,首次创建Service就会回调onCreate()方法,然后回调onStartCommand()方法,再次startService()的时候,就只能执行一次onStartCommand(),服务一旦开启就需要通过stopService()或者stopSelf()方法,才能将服务关闭,这时就会回调onDestroy()方法
- 创建服务类
创建一个服务非常简单,只要继承Service,并实现onBind()方法
public class BackGroupService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.e("Service","onBind");
return null;
}
@Override
public void onCreate() {
Log.e("Service","onCreate");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("Service","onStartCommand");
new Thread(new Runnable() {
@Override
public void run() {
while (true){
Log.e("Service","doSomething");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.e("Service","onDestroy");
super.onDestroy();
}
}
- 配置服务
Service也是四大组件之一,所以必须在manifests中配置
<service android:name=".Service.BackGroupService"/>
- 启动服务和停止服务
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button bt_open, bt_close;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_open = findViewById(R.id.open);
bt_close = findViewById(R.id.stop);
bt_open.setOnClickListener(this);
bt_close.setOnClickListener(this);
intent = new Intent(this,BackGroupService.class);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.open:
startService(intent);
break;
case R.id.stop:
stopService(intent);
break;
default:
break;
}
}
}
当你开启服务后,还有一种方法可以关闭服务,在设置中,通过应用->找到自己应用->停止
运行程序后,我们点击开始服务,然后再次点击开始服务,然后一段时间后关闭服务。我们以Log信息来验证普通Service的生命周期:onCreate->onStartCommand->onStartCommand->onDestroy
05-09 09:19:33.774 3729-3729/com.example.cxy.testservice E/Service: onCreate
05-09 09:19:33.775