让Service变成杀不死的小强,浅谈如何实现不死的服务
2015-10-10 14:14
281 查看
在实际开发中,我遇到一个需求就是要上传多张照片并且是100%要全部上传成功的。于是想到了利用service来实现。实现思路,看代码吧。
//第一步创建后台上传的service
public class UploadImagesService extends Service{
private int n;
private Integer case_id;
private ServiceStateReceiver searchReceiver;
private PreferencesHelper p;
private NotificationManager notifMag;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//注册一个service监听,设置优先级为最大
IntentFilter localIntentFilter = new IntentFilter("android.intent.action.USER_PRESENT");
localIntentFilter.setPriority(Integer.MAX_VALUE);// 整形最大值
searchReceiver = new ServiceStateReceiver();
registerReceiver(searchReceiver, localIntentFilter);
//做一些事情~~~
//如果service进程被kill掉,保留service的状态为开始状态,随后系统会尝试重新创建service(START_STICKY粘性的)
flags = START_STICKY;
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
// 销毁时重新启动Service
Intent localIntent = new Intent("com.hy.jj.android.service.UploadImagesService");
localIntent.setPackage(getPackageName());
this.startService(localIntent);
}
}
//第二步是创建监听服务状态的Receiver
/**
* 监听服务
*
* */
public class ServiceStateReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//启动上传图片服务
Intent uploagImageServer = new Intent("com.hy.jj.android.service.UploadImagesService");
uploagImageServer.setPackage(context.getPackageName());
context.startService(uploagImageServer);
}
}
//第三步在AndroidManifest文件中配置
<!-- 注册上传图片服务 -->
<service android:name="com.hy.jj.android.service.UploadImagesService" >
<intent-filter>
<action android:name="com.hy.jj.android.service.UploadImagesService" />
</intent-filter>
</service>
<!-- 注册监听上传服务 -->
<receiver android:name="com.hy.jj.android.receiver.ServiceStateReceiver" >
<intent-filter android:priority="1000" >
<!-- 系统启动完成后会调用 -->
<action android:name="android.intent.action.BOOT_COMPLETED" />
<!-- 解锁完成后会调用 -->
<action android:name="android.intent.action.USER_PRESENT" />
<!-- 监听情景切换 -->
<action android:name="android.media.RINGER_MODE_CHANGED" />
<action android:name="com.hy.jj.android.receiver.ServiceStateReceiver" />
</intent-filter>
</receiver>
好了打工告成,大家可以试一下,是不是service杀不死了,即使杀死了也会被重启
//第一步创建后台上传的service
public class UploadImagesService extends Service{
private int n;
private Integer case_id;
private ServiceStateReceiver searchReceiver;
private PreferencesHelper p;
private NotificationManager notifMag;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//注册一个service监听,设置优先级为最大
IntentFilter localIntentFilter = new IntentFilter("android.intent.action.USER_PRESENT");
localIntentFilter.setPriority(Integer.MAX_VALUE);// 整形最大值
searchReceiver = new ServiceStateReceiver();
registerReceiver(searchReceiver, localIntentFilter);
//做一些事情~~~
//如果service进程被kill掉,保留service的状态为开始状态,随后系统会尝试重新创建service(START_STICKY粘性的)
flags = START_STICKY;
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
// 销毁时重新启动Service
Intent localIntent = new Intent("com.hy.jj.android.service.UploadImagesService");
localIntent.setPackage(getPackageName());
this.startService(localIntent);
}
}
//第二步是创建监听服务状态的Receiver
/**
* 监听服务
*
* */
public class ServiceStateReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//启动上传图片服务
Intent uploagImageServer = new Intent("com.hy.jj.android.service.UploadImagesService");
uploagImageServer.setPackage(context.getPackageName());
context.startService(uploagImageServer);
}
}
//第三步在AndroidManifest文件中配置
<!-- 注册上传图片服务 -->
<service android:name="com.hy.jj.android.service.UploadImagesService" >
<intent-filter>
<action android:name="com.hy.jj.android.service.UploadImagesService" />
</intent-filter>
</service>
<!-- 注册监听上传服务 -->
<receiver android:name="com.hy.jj.android.receiver.ServiceStateReceiver" >
<intent-filter android:priority="1000" >
<!-- 系统启动完成后会调用 -->
<action android:name="android.intent.action.BOOT_COMPLETED" />
<!-- 解锁完成后会调用 -->
<action android:name="android.intent.action.USER_PRESENT" />
<!-- 监听情景切换 -->
<action android:name="android.media.RINGER_MODE_CHANGED" />
<action android:name="com.hy.jj.android.receiver.ServiceStateReceiver" />
</intent-filter>
</receiver>
好了打工告成,大家可以试一下,是不是service杀不死了,即使杀死了也会被重启
相关文章推荐
- 第十一届浙江省省赛题(未补完)
- PHP简单Socket编程
- Jersey入门例子
- js工具收集汇总
- mysql配置文件my.cnf详解
- 浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
- [人月神话]读书笔记10--20年后的人月神话(The Mythical Man-Month after 20 Years)
- 如何进行有效地辩论
- storm初识
- IO流下:字节流、流操作规律(java基础)
- Swift Error fatal error: unexpectedly found nil while unwrapping an Optional value
- C#取枚举描述
- 树
- Sql Server 跨服务器连接
- 机票预订系统的可行性分析
- perl win32::ole 操作excel
- android TextView中超链接的事件捕捉(textview上LINK的点击事件)
- SQL注入——如何攻击(二)
- 最短路径
- 技术不是问题,管理才是王道