RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
Android5.0以上app进程保活的正确姿势-创新互联

我的原文: http://blog.csdn.net/brycegao321/article/details/52312030

成都创新互联公司服务项目包括浮山网站建设、浮山网站制作、浮山网页制作以及浮山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,浮山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到浮山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

   有图有真相, 亲测锤子T2、华为Mate8手机杀掉进程后能自启, 我设置的自启时间间隔为500ms(仅仅是为了测试)。

                  Android5.0以上app进程保活的正确姿势   Android5.0以上app进程保活的正确姿势

          首先要明确保活的概念:

          1、非android核心进程(例如com.android.phone)都可以被干掉;

      2、保活并不能真正的保证app进程不死, 而是能在被干掉后马上启动;

Android系统按照进程的优先级分为:

1. 前台进程(Forgroud process):   顶层activity(已执行onResume); 有个Service,并绑定到跟用户正在交互的activity;在Service里调用了startForground函数;正在执行 onReceive函数的BroadCastReceiver。

2. 可见进程(Visible process):  被对话框遮挡的activity, 执行了onPause;   拥有绑定到Activity的Service, 但该Activity被遮挡了, 例如按Home键,并执行了onStop。
3. 服务进程(Service process): 有正在运行的Service, 但是没有1/2的特性。

4. 后台进程(Background process)没有正在运行的Service, 只有不可见的Activity, 即Activity执行了onStop函数。

5. 空进程(Empty Process), 不含Android 4大组件的进程。

       按照Android的设计, app只能提高自己的进程优先级, 降低被杀掉的概率。

      我们更关心的是进程被干掉后怎么拉起来, 有如下几个方法:

 1、 注册静态BroadcastReceiver, 监听系统广播;

 2、 启动一个服务, 并覆盖Service的onStartCommand函数, 返回Service.START_STICKY。   用处是被gc回收后在以后某个时间被系统拉起来, 然并卵,   并不是我们想要的。

 3.  使用Native进程保活, Android5.0以下好用, 在Android5.0以上就废了, 所以不细说了。

 4. 使用JobSheduler机制保活,  上帝在关闭一扇门的时候(native进程保活废弃了),打开了一扇窗(JobSheduler替代了native进程方式)。

 5.  家族系app互拉, 例如百度旗下所有app, 启动其中一个app时, 它会拉起百度旗下其他app进程。作法很流氓, 也是厂商和用户深恶痛绝的。

以下是参考代码, 只是为验证进程能自启, 所以写的很简单Android5.0以上app进程保活的正确姿势

public class MyJobService extends JobService {    @Override    public void onCreate() {        super.onCreate();        startJobSheduler();    }    public void startJobSheduler() {        try {            int id = 1;            JobInfo.Builder builder = new JobInfo.Builder(id,                    new ComponentName(getPackageName(), MyJobService.class.getName() ));            builder.setPeriodic(500);  //间隔500毫秒调用onStartJob函数, 500只是为了验证            JobScheduler jobScheduler = (JobScheduler)this.getSystemService(Context.JOB_SCHEDULER_SERVICE);            int ret = jobScheduler.schedule(builder.build());        } catch (Exception ex) {
            ex.printStackTrace();        }
    }    @Override    public boolean onStartJob(JobParameters jobParameters) {
        Log.d("brycegao", "onStartJob alive");        return false;    }    @Override    public boolean onStopJob(JobParameters jobParameters) {
        Log.d("brycegao", "onStopJob alive");        return false;    }
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站标题:Android5.0以上app进程保活的正确姿势-创新互联
文章URL:http://lswzjz.com/article/dcieep.html