亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android5.0以上app進程保活的正確姿勢

發布時間:2020-07-31 18:44:18 來源:網絡 閱讀:1298 作者:brycegao 欄目:移動開發

    我的原文: 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;    }
}
<service android:name=".MyJobService"    android:permission="android.permission.BIND_JOB_SERVICE"/>




                               我的微信公眾號, 歡迎關注, 讓我們一起成長Android5.0以上app進程保活的正確姿勢

                                                     Android5.0以上app進程保活的正確姿勢       


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达尔| 新干县| 北流市| 昆山市| 宁津县| 浦县| 庆安县| 翁牛特旗| 绥德县| 桂阳县| 多伦县| 轮台县| 黄龙县| 三门峡市| 宁乡县| 镇安县| 平南县| 宜兰市| 宾阳县| 天津市| 邢台县| 鹰潭市| 滕州市| 眉山市| 铜川市| 汉中市| 旬邑县| 张家界市| 兴安县| 弋阳县| 镇赉县| 靖江市| 鄂托克旗| 天津市| 加查县| 乐安县| 鸡泽县| 仪陇县| 贡山| 内乡县| 澄江县|