• Android-Service的保活方法


    支持原文:http://tryenough.com/android-service-life

    保活Service可从两方面考虑:

    一.改变Service自身的方法

    1.提高Service的优先级

    在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播。

            <service
                android:name="com.dbjtech.acbxt.waiqin.UploadService"
                android:enabled="true" >
                <intent-filter android:priority="1000" >
                    <action android:name="com.dbjtech.myservice" />
                </intent-filter>
            </service>
    

    2.在Service即将销毁的时候重新启动

    支持原文:http://tryenough.com/android-service-life

    可以直接在onDestroy()里startService

    	@Override
    	public void onDestroy() {
     
    		 Intent sevice = new Intent(this, MainService.class);
    		 this.startService(sevice);
     
    		super.onDestroy();
    	}
    

    也可以用service +broadcast 方式启动:

    onDestroy方法里重启service,当service走ondestory的时候,发送一个自定义的广播,当收到广播的时候,重新启动service;

            <receiver android:name="com.dbjtech.acbxt.waiqin.BootReceiver" >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.USER_PRESENT" />
                    <action android:name="com.dbjtech.waiqin.destroy" />//这个就是自定义的action
                </intent-filter>
            </receiver>
    

    在onDestroy时:

    	@Override
    	public void onDestroy() {
    		stopForeground(true);
    		Intent intent = new Intent("com.dbjtech.waiqin.destroy");
    		sendBroadcast(intent);
    		super.onDestroy();
    	}
    

    在BootReceiver里

    支持原文:http://tryenough.com/android-service-life

    public class BootReceiver extends BroadcastReceiver {
     
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		if (intent.getAction().equals("com.dbjtech.waiqin.destroy")) {
    			//TODO
    			//在这里写重新启动service的相关操作
    				startUploadService(context);
    		}
     
    	}
     
    }
    

    3.onStartCommand方法,返回START_STICKY

    	@Override
    	public int onStartCommand(Intent intent, int flags, int startId) {
    		flags = START_STICKY;
    		return super.onStartCommand(intent, flags, startId);
    	}
    

    4.提升service进程优先级
    在onStartCommand方法内添加如下代码:

    		 Notification notification = new Notification(R.drawable.ic_launcher,
    		 getString(R.string.app_name), System.currentTimeMillis());
    		
    		 PendingIntent pendingintent = PendingIntent.getActivity(this, 0,
    		 new Intent(this, AppMain.class), 0);
    		 notification.setLatestEventInfo(this, "uploadservice", "请保持程序在后台运行",
    		 pendingintent);
    		startForeground(0x111, notification);
    

    二.利用系统特性的方法

    支持原文:http://tryenough.com/android-service-life

    1.监听系统特殊事件

    通过系统的一些广播,比如:手机重启、界面唤醒、应用状态改变等等监听并捕获到,然后判断我们的Service是否还存活,别忘记加权限啊。

            <receiver android:name="com.dbjtech.acbxt.waiqin.BootReceiver" >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.USER_PRESENT" />
                    <action android:name="android.intent.action.PACKAGE_RESTARTED" />
                    <action android:name="com.dbjtech.waiqin.destroy" />
                </intent-filter>
            </receiver>
    

    BroadcastReceiver中:

    	@Override
    	public void onReceive(Context context, Intent intent) {
    		if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
    			System.out.println("手机开机了....");
    			startUploadService(context);
    		}
    		if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {
    				startUploadService(context);
    		}
    	}
    

    2.特殊手机监听特殊推送,例如小米手机注册小米推送

    支持原文:http://tryenough.com/android-service-life

  • 相关阅读:
    算法笔记--支配树
    51Nod 1187 寻找分数
    ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer
    ACM-ICPC 2018 徐州赛区网络预赛 A. Hard to prepare
    HDU
    HDU
    Codeforces 1011E
    Codeforces 990D
    Codeforces 989C
    Codeforces 932E
  • 原文地址:https://www.cnblogs.com/66it/p/10490853.html
Copyright © 2020-2023  润新知