Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务
Service简介
Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service中执行耗时的操作,除非你在Service中创建了子线程来完成耗时操作
Service的运行不依赖于任何用户界面,即使程序被切换到后台或者用户打开另一个应用程序,Service仍然能够保持正常运行,这也正是Service的使用场景。当某个应用程序进程被杀掉时,所有依赖于该进程的Service也会停止运行
后台服务
后台服务可交互性主要是体现在不同的启动服务方式,startService()和bindService()。bindService()可以返回一个代理对象,可调用Service中的方法和获取返回结果等操作,而startService()不行
不可交互的后台服务
不可交互的后台服务即是普通的Service,Service的生命周期很简单,分别为onCreate、onStartCommand、onDestroy这三个。当我们startService()的时候,首次创建Service会回调onCreate()方法,然后回调onStartCommand()方法,再次startService()的时候,就只会执行一次onStartCommand()。服务一旦开启后,我们就需要通过stopService()方法或者stopSelf()方法,就能把服务关闭,这时就会回调onDestroy()
一、创建服务类
创建一个服务非常简单,只要继承Service,并实现onBind()方法
public class BackGroupService extends Service {
/**
* 綁定服务时调用
*
* @param intent
* @return
*/
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.e("Service", "onBind");
return null;
}
/**
* 服务创建时调用
*/
@Override
public void onCreate() {
Log.e("Service", "onCreate");
super.onCreate();
}
/**
* 执行startService时调用
*
* @param intent
* @param flags
* @param startId
* @return
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) { Log.e("Service", "onStartCommand");
//这里执行耗时操作
new Thread() {
@Override
public void run() {
while (true){
try {
Log.e("Service", "doSomething");
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中配置
三、启动服务和停止服务
我们通过两个按钮分别演示启动服务和停止服务,通过startService()开启服务,通过stopService()停止服务
public class MainActivity extends AppCompatActivity {
Button bt_open, bt_close;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.activity_main);
bt_open = (Button) findViewById(R.id.open);
bt_close = (Button) findViewById(R.id.close);
final Intent intent = new Intent(this, BackGroupService.class);
bt_open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//启动服务
startService(intent);
}
});
bt_close.setOnClickListener(new View.OnClickListener() {
@Override