让Service变成杀不死的小强,浅谈如何实现不死的服务

在实际开发中,我遇到一个需求就是要上传多张照片并且是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杀不死了,即使杀死了也会被重启

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值