Androidアプリの生存検出方式


Androidの開発者は、Androidの各APPのライフサイクル状態がActivityManagerService(AMS)プロセスによって維持されることを知っていますので、あるAPPがkillまたは思いがけないcrashされると、AMSプロセスは最初の時間にAPPのコンポーネントを保護します。
今日はAMSプロセスのメンテナンスAPPの流れを見ません。AMSがどのような手段で最初に得た通知なのかを見ます。このような手段を私達のAPPに適用できますか?多プロセス環境の下で、このような手段を通じてプロセス間の監視が保護の役割を果たします。
一つのAPPが唯一のActivityThreadに対応することを知っています。これはAPPの本当の入口でもあります。ActivityThread Mainが実行するとAMSプロセスに付着し、その後はAMSプロセスによってAPPの状態を維持します。じゃポイントはatechにあります。
次のコードを参照してください。ActivityManagerService((zhi atachappication Locked)

private final boolean attachApplicationLocked(IApplicationThread thread,
   int pid) {

  ...

  final String processName = app.processName;
  try {
   AppDeathRecipient adr = new AppDeathRecipient(
     app, pid, thread);
   <span style="background-color: rgb(255, 255, 51);"><strong>thread.asBinder().linkToDeath(adr, 0);</strong></span>
   app.deathRecipient = adr;
  } catch (RemoteException e) {
   app.resetPackageList(mProcessStats);
   startProcessLocked(app, "link fail", processName);
   return false;
  }

  ...

  return true;
 }
上にハイライトされているこの行のコードがポイントです。IBinder〓〓linkToDeathを使って完成しました。linkToDeath方法の最初のパラメータは、1つのandroid.os.IBinder.DeathRecipintのインターフェースを受信して実現され、app deathの通知を受信するために使用される。
もちろん、IBinder〓〓unlink ToDeathによって傍受をキャンセルすることもできます。
興味のある学生は、ソースコードを入力して詳細なコメントを見ることができますが、ここではコメントを貼り付けていません。ソースのDeathRecipientの実現は、ApDeathRecipientが完了したもので、この処理は主にAMSが現在のAPPプロセスに対応するコンポーネントリソースを整理します。
上記を通じて、私達のAPPでは以上の手段を使って、複数のプロセスの間で相手を守る役割を果たすためには、相手のIBinderオブジェクトを得る必要があります。
IBinderオブジェクトの取得方法は、以下の通りです。
1.Conteext菗bindServiceを通じて、oneServiceConnecedでIBinderオブジェクトを受信する;
2.android.s.Messengerオブジェクトを作成し、intentを通じてこのオブジェクトを相手に渡すプロセス。
3.直接new BinderでonTransactを書き直し、intentを通じてこのBinderオブジェクトを相手に渡すプロセス。
以上のAndroidアプリの生存検査方法は、小編集が皆さんに提供した内容の全部です。参考にしていただければと思います。よろしくお願いします。