您的位置:首页 > 其它

让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杀不死了,即使杀死了也会被重启
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: