Android-保活(1)フロントサービス保活
前言
プロジェクトの中で1つの需要に出会って、意外にもユーザーの位置付けの情報をアップロードする必要があって、私の現在知っている保活の手段に対する探究を引き起こして、同時に取引先に出会ったことがあって、プッシュは受け取ることができなくて、微信のように、MMPの、取引先を相手にしたくないと言って、
目次
一:フロントサービスの作成方法
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プロセス
リファレンス作成者リンク