Android-保活(1)フロントサービス保活

6260 ワード

妻のご加護、コードはBUGがありません
前言
プロジェクトの中で1つの需要に出会って、意外にもユーザーの位置付けの情報をアップロードする必要があって、私の現在知っている保活の手段に対する探究を引き起こして、同時に取引先に出会ったことがあって、プッシュは受け取ることができなくて、微信のように、MMPの、取引先を相手にしたくないと言って、
目次
  • 1:フロントサービスの作成方法
  • 1.DeskServiceフロントサービス
  • 2.フロントサービス通知バーフラグ
  • を削除
  • 3.登録サービス
  • 4.サービス開始
  • 2 2:adjレベル
  • の表示
    一:フロントサービスの作成方法
    1.DeskServiceフロントサービス
    package com.cpsc.livedemo;
    
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.Service;
    import android.content.Intent;
    import android.os.Build;
    import android.os.IBinder;
    import android.support.annotation.Nullable;
    import android.util.Log;
    
    /**
     *   :
     * 

    * Created by allens on 2018/1/31. */ public class DeskService extends Service { private static final String TAG = "DaemonService"; public static final int NOTICE_ID = 100; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); Log.d(TAG, "DaemonService---->onCreate , service"); // API 18, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { Notification.Builder builder = new Notification.Builder(this); builder.setSmallIcon(R.mipmap.ic_launcher); builder.setContentTitle("KeepAppAlive"); builder.setContentText("DaemonService is runing..."); startForeground(NOTICE_ID, builder.build()); // // CancelNoticeService, ,oom_adj Intent intent = new Intent(this, CancelNoticeService.class); startService(intent); } else { startForeground(NOTICE_ID, new Notification()); } } @Override public int onStartCommand(Intent intent, int flags, int startId) { // Service // , service return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); // Service , if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { NotificationManager mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); mManager.cancel(NOTICE_ID); } Log.d(TAG, "DaemonService---->onDestroy, service "); // Intent intent = new Intent(getApplicationContext(), DeskService.class); startService(intent); } }


    2.フロントサービス通知欄フラグの削除
    package com.cpsc.livedemo;
    
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.Service;
    import android.content.Intent;
    import android.os.Build;
    import android.os.IBinder;
    import android.os.SystemClock;
    import android.support.annotation.Nullable;
    
    /**
     *   :
     * 

    * Created by allens on 2018/1/31. */ public class CancelNoticeService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) { Notification.Builder builder = new Notification.Builder(this); builder.setSmallIcon(R.mipmap.ic_launcher); startForeground(DeskService.NOTICE_ID, builder.build()); // , DaemonService new Thread(new Runnable() { @Override public void run() { // 1s SystemClock.sleep(1000); // CancelNoticeService stopForeground(true); // DaemonService NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.cancel(DeskService.NOTICE_ID); // , stopSelf(); } }).start(); } return super.onStartCommand(intent, flags, startId); } }


    3.登録サービス
    
            
    
    
            
    

    4.サービスの開始
     startService(new Intent(this, DeskService.class));
    

    二:adjレベルの表示adb shell ps|grep 基本情報の表示
    1|root@generic_x86:/ # ps|grep com.cpsc.livedemo                               
    u0_a63    6834  1348  1285208 43884 SyS_epoll_ b73712b5 S com.cpsc.livedemo
    u0_a63    6884  1348  1271160 28944 SyS_epoll_ b73712b5 S com.cpsc.livedemo:daemon_service
    


    説明する
    u0_a63
    USERプロセスの現在のユーザー
    6834
    プロセスID
    1348
    プロセスの親プロセスID
    1285208
    プロセスの仮想メモリサイズ
    43884
    メモリに実際に存在するメモリのサイズ
    com.cpsc.livedemo
    プロセス名cat /proc//oom_adj
    root@generic_x86:/ # cat /proc/6884/oom_adj                                    
    1
    root@generic_x86:/ # cat /proc/6884/oom_adj                                    
    1
    root@generic_x86:/ # 
    
    

    adjレベル

    説明
    UNKNOWN_ADJ
    16
    予約された最下位レベルは、一般的にキャッシュのプロセスに対してこのレベルに設定される可能性があります.
    CACHED_APP_MAX_ADJ
    15
    キャッシュプロセス、空のプロセスは、メモリが不足している場合にkillが優先されます.
    CACHED_APP_MIN_ADJ
    9
    キャッシュ・プロセス、すなわち空のプロセス
    SERVICE_B_ADJ
    8
    非アクティブなプロセス
    PREVIOUS_APP_ADJ
    7
    プロセスの切り替え
    HOME_APP_ADJ
    6
    ホームと対話するプロセス
    SERVICE_ADJ
    5
    サービスのあるプロセス
    HEAVY_WEIGHT_APP_ADJ
    4
    ハイウェイトプロセス
    BACKUP_APP_ADJ
    3
    バックアップ中のプロセス
    PERCEPTIBLE_APP_ADJ
    2
    音楽を再生するなどの感知可能なプロセス
    VISIBLE_APP_ADJ
    1
    可視プロセス
    FOREGROUND_APP_ADJ
    0
    フロントプロセス
    PERSISTENT_SERVICE_ADJ
    -11
    重要なプロセス
    PERSISTENT_PROC_ADJ
    -12
    コアプロセス
    SYSTEM_ADJ
    -16
    システムプロセス
    NATIVE_ADJ
    -17
    システムからのNativeプロセス
    リファレンス作成者リンク