Androidはどのようにして微信のようなバックグラウンドサービスが殺されないようにしますか?
4488 ワード
==========================================
スクリーンロックアプリを作っています.
ロック画面を作るにはサービスが使われているに違いないが、毎日手動で自分のメモリクリーンアップボタンをクリックすると、私のサービスはいつも殺されることに気づいた.
微信のバックグラウンドサービスは正常に稼働しており、殺されない.
360なら殺されることもありませんが、360は再起動します.そして360は2つのバックグラウンドサービスで、相互作用する可能性があると思います.1つを殺したとき、もう1つは放送を受信して再起動します.
startForegroundやサービスの優先度を高める方法を試みたが、だめで、サービスが殺されることに気づいた.
微信のコードを逆コンパイルした.
皆さん、何とかしてください.ありがとう
以下は微信の登録サービスです.
コードは次のとおりです.
==================================
Androidシステム殺しプログラムは,ソフトウェアシステム資源の占有状況を重要な判断である.
==================================
markちょっと結果を待って
転載先:https://www.cnblogs.com/liangxieliang56/p/4002019.html
スクリーンロックアプリを作っています.
ロック画面を作るにはサービスが使われているに違いないが、毎日手動で自分のメモリクリーンアップボタンをクリックすると、私のサービスはいつも殺されることに気づいた.
微信のバックグラウンドサービスは正常に稼働しており、殺されない.
360なら殺されることもありませんが、360は再起動します.そして360は2つのバックグラウンドサービスで、相互作用する可能性があると思います.1つを殺したとき、もう1つは放送を受信して再起動します.
startForegroundやサービスの優先度を高める方法を試みたが、だめで、サービスが殺されることに気づいた.
微信のコードを逆コンパイルした.
皆さん、何とかしてください.ありがとう
以下は微信の登録サービスです.
コードは次のとおりです.
public class CoreService extends Service
implements com.tencent.mm.jni.platformcomm.f, af, bl
{
private ao bZl;
private ac bZm = new ac();
private boolean bZn = true;
public final int bZo = -1213;
private final ai bZp = new e(this);
private com.tencent.mm.modelstat.l bZq = null;
private AddrBookObserver bZr;
private WatchDogPushReceiver bZs;
private WakerLock bZt = null;
private m bZu = new m();
private ay bZv = new ay(new g(this), false);
private void oj()
{
aa.w("MicroMsg.CoreService", "[COMPLETE EXIT]");
bk.Fg().d(3, 10000, "");
bg.onDestroy();
try
{
MMReceivers.AlarmReceiver.D(getApplicationContext());
MMReceivers.AlarmReceiver.B(getApplicationContext());
Alarm.H(getApplicationContext());
label43: aa.appenderClose();
Process.killProcess(Process.myPid());
return;
}
catch (Exception localException)
{
break label43;
}
}
public final void H(boolean paramBoolean)
{
if (!paramBoolean)
{
aa.w("MicroMsg.CoreService", "[NETWORK LOST]");
bk.Fc().cFB = false;
bk.Fd().eJ(0);
bk.Fb().a(10502, "", null);
this.bZn = false;
return;
}
aa.w("MicroMsg.CoreService", "[NETWORK CONNECTED]");
bk.Fc().cFB = true;
boolean bool = this.bZm.oM();
if ((this.bZn) && (!bool))
{
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = Boolean.valueOf(this.bZn);
aa.d("MicroMsg.CoreService", "network not change or can't get network info, lastStatus connect:%b", arrayOfObject);
return;
}
if (bool)
bk.Ff().EN();
this.bZn = true;
bk.Fd().eJ(1);
bk.Fb().a(10501, "", null);
if (this.bZt == null)
this.bZt = new WakerLock(getApplicationContext());
if (!this.bZt.isLocking())
this.bZt.lock(14000L);
aa.i("MicroMsg.CoreService", "checking ready, start in 7000ms");
this.bZv.bO(7000L);
}
public final boolean a(int paramInt, byte[] paramArrayOfByte)
{
if (getSharedPreferences("system_config_prefs", com.tencent.mm.compatible.g.l.qi()).getBoolean("settings_fully_exit", true))
{
aa.i("MicroMsg.CoreService", "fully exited, no need to notify worker");
return false;
}
Intent localIntent = new Intent(this, NotifyReceiver.class);
localIntent.putExtra("notify_option_type", 2);
localIntent.putExtra("notify_uin", this.bZl.ES().sd());
localIntent.putExtra("notify_respType", paramInt);
localIntent.putExtra("notify_respBuf", paramArrayOfByte);
localIntent.putExtra("notfiy_recv_time", cj.FD());
localIntent.putExtra("notify_skey", this.bZl.ES().uo());
aa.i("MicroMsg.CoreService", "notify broadcast:" + localIntent.getAction() + ", type=" + paramInt);
try
{
sendBroadcast(localIntent);
return true;
}
catch (Exception localException)
{
while (true)
{
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = localException.toString();
aa.a("MicroMsg.CoreService", "onNotify hasDestroyed %s", arrayOfObject);
}
}
}
public IBinder onBind(Intent paramIntent)
{
aa.d("MicroMsg.CoreService", "onBind~~~ threadID:" + Thread.currentThread());
return this.bZl;
}
public void onCreate()
{
aa.d("MicroMsg.CoreService", "onCreate~~~threadID:" + Thread.currentThread());
super.onCreate();
if (Build.VERSION.SDK_INT
==================================
Androidシステム殺しプログラムは,ソフトウェアシステム資源の占有状況を重要な判断である.
==================================
markちょっと結果を待って
転載先:https://www.cnblogs.com/liangxieliang56/p/4002019.html