Service
1. 什么是Service
2. Service有哪些应用场景
3. startService方式启动Service怎么做
4. bindService方式启动Service怎么做
5. IntentService有什么不同
6. IntentService怎么用,注意事项
什么是Service
Service是Android中经常使用组件之中的一个,它是Android中实现程序后台执行的解决方式,它非常适合用于去执行那些不须要和用户交互且还要长期执行的任务。
这里的后台并非子线程的意思。Service默认并不会执行在子线程中。它也不会执行在一个独立的进程中,它相同执行在UI线程中,因此,不要在Service中执行耗时的操作。假设须要执行耗时的操作,能够在Service中创建子线程来完毕耗时操作。
Service的执行不依赖于不论什么用户界面,及时程序被切换到后台或者用户打开了另外一个应用程序,Service仍然能够保持正常执行。这也正式Service的使用场景。
当某个应用程序进程被杀掉时,全部依赖于该进程的Service也会停止执行。
Service有哪些应用场景
- 耗时较长的操作
- 需要在后台进行的操作
startService方式启动Service怎么做
1.新建类继承Service
2.重写onCreate方法 (Service在创建时调用的方法,可以用来做数据初始化,Service在没有停止前,只会执行一次 )
3.实现onBind抽象方法 (由于Service是一个抽象类,定义了一个onBind抽象方法,所以必须实现此抽象方法,return null即可,此方法在startService方式用不上,无需理会即可。)
4.重写onStartCommand方法
5.重写onDestroy方法(Service在退出时调用,此方法中可以编写释放资源的操作 )
6.在AndroidManifest中注册Service (使用标签注册同Activity注册 )
7.在有context环境在启动service
bindService方式启动Service怎么做
public class MyBindService extends Service {
public class MyBinder extends Binder {
public MyBindService getService(){
return MyBindService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
System.out.println("执行onBind方法...");
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("执行onUnBind方法...");
return true;
}
@Override
public void onCreate() {
super.onCreate();
System.out.println("执行onCreate方法");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("执行onStartCommand方法");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
System.out.println("执行onRebind方法");
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("执行onDestroy方法");
}
}
新建了一个类,继承Binder
public class MainActivity extends AppCompatActivity{
private MyBindService.MyBinder myBinder;
private ServiceConnection connection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder= (MyBindService.MyBinder) service;
MyBindService myBindService=myBinder.getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
IntentService有什么不同
IntentService 是继承于 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时操作,启动 IntentService 的方式和启动传统 Service 一样,同时,当任务执行完后,IntentService 会自动停止,而不需要我们去手动控制。另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列的方式在IntentService 的 onHandleIntent 回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推。
而且,所有请求都在一个单线程中,不会阻塞应用程序的主线程(UI Thread),同一时间只处理一个请求。 那么,用 IntentService 有什么好处呢?首先,我们省去了在 Service 中手动开线程的麻烦,第二,当操作完成时,我们不用手动停止 Service。
IntentService怎么用,注意事项
public class MyIntentService extends IntentService{
public MyIntentService() {
super("MyIntentService");
}
public MyIntentService(String name) {
super(name);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
}
}
1、这个类不要给UI传递信息,如果要向用户展示处理结果信息请用Activity;
2、每次只能处理一个请求;
3、每一个处理请求过程都不能中断;