1. 前台进程
Service 一般都执行在 后台,它优先级比较低,如果系统内存不足,可能会 回收正在运行的 Service,如果希望Service 一直运行,并且不会因为 系统不足而回收,可以创建前台Service;
前台Service与普通Service最大的区别:
前台Service:一直有一个正在运行的图标在系统状态栏显示,下拉后可以看到详细信息,类似于通知,有时候由于特定需求,必须要使用前台 Service,比如墨迹天气,它的 Service在后台更新天气数据的时候,还会在系统状态栏一直显示当前天气信息;
2. 代码如下
public class MyService extends Service {
// 自己自定义MyBinder继承Binder
private MyBinder mBinder = new MyBinder() ;
@Override
public void onCreate() {
super.onCreate();
Log.e("TAG" , "onCreate__executed") ;
Log.e("TAG" , "MyService thread id is " + Thread.currentThread().getId()) ;
Notification notification = new Notification(R.mipmap.ic_launcher,
"有通知到来", System.currentTimeMillis());
Intent notificationIntent = new Intent(this, ServiceActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
/*notification.setLatestEventInfo(this, "这是通知的标题", "这是通知的内容",
pendingIntent);*/
startForeground(1, notification);
}
/**
* 在 MyService 中开启子线程
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("TAG" , "onStartCommand__executed") ;
new Thread(new Runnable() {
@Override
public void run() {
// 开始执行后台任务
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
/**
* Activity 与 Service关联,返回MyBinder实例对象:
* 用于在 Activity中,通过onServiceConnected方法,指定 Service执行相关任务
*/
@Nullable
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
class MyBinder extends Binder{
/**
* 自己自定义MyBinder继承Binder,然后随便定义一个方法,
* 用于在后台执行下载任务,这里只是做一个测试
*/
public void startDownload(){
// 模拟在后台下载任务
}
}
}
网友评论