介绍Service
- Service是Android中应用程序后台运行的解决方案,适合在执行一些不需要用户交互但是还需要长时间运行的任务上。
- Service运行在UI线程上,所以不建议在服务中进行耗时操作,当然你还是可以再服务中开辟一个子线程进行一些耗时操作
- Service不依赖于用户界面,当程序被切换到后台的话,依然是可以正常运行。当程序被杀死的时候,服务也会停止运行
普通的Service
- 新建服务
- 启动服务
- 停止服务
1 | public class MyService extends Service { |
1 | startService(new Intent(MainActivity.this, MyService.class)); |
1 | stopService(new Intent(MainActivity.this,MyService.class)); |
- onCreate方法在服务第一次创建的时候被调用,onStartCommand方法在每次服务启动的时候都会调用,onDestory方法在服务销毁的时候调用
前台服务
前台服务被回收的优先级较低,不容易被回收1
2
3
4
5
6
7
8
9
10
11
12
13
14//前台服务
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
Notification notification = new Notification.Builder(this)
.setContentTitle("content title")
.setContentText("content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
.build();
startForeground(1,notification);
}
- 使用startForeground方法,将Service设置为前台服务,并在系统的状态栏显示出来
IntentService
IntentService
可以在结束的时候自动结束Service- 不在主线程中
- 处理耗时操作在
onHandlerIntent
中
1 | public class MyIntentService extends IntentService { |
Activity和Service进行通信
- 在Activity中与Service 取得联系,并进行操作
- 随之进行绑定或者解绑
1 | //和服务进行关联,进行逻辑操作 |
1 | bindService(new Intent(MainActivity.this,MyService.class),mServiceConnection,BIND_AUTO_CREATE); |
Service生命周期
- startService
onCreate–>onStartCommand–>onStopService–>onDestory - bindService
onCreate–>onBind–>unBind–>onDestory