Android のプロセスとスレッド
プロセス
- フォアグラウンド プロセス
- 目に見えるプロセス
- サービスプロセス
- 舞台裏のプロセス
- 空のプロセス
フォアグラウンド プロセス
// フォアグラウンド プロセス
- 現在のプロセス アクティビティは、ユーザーと対話しています。
- 現在のプロセス サービスがアクティビティと対話しているか、現在のサービスが startForground() を呼び出してフォアグラウンド プロセスに属しているか、現在のサービスがライフサイクル (onCreate()、onStart()、onDestory()) を実行しています。
- プロセスは onReceive() メソッドを実行している BroadcostReceiver を保持します。
目に見えるプロセス
// 可視プロセス:
- プロセスは、もはやフォアグラウンドではなく、onPouse() 状態にあるアクティビティを保持しています。現在カバーされているアクティビティは、ダイアログの形式で存在します。
- プロセスには、可視のアクティビティにバインドされたサービスがあります。
サービスプロセス(サービスプロセス)
// サービス プロセス:
サービス サービスを開始するために startSerice() が現在有効になっている場合、そのプロセスはサービス プロセスと見なすことができます。
舞台裏のプロセス
//
バックグラウンド プロセス アクティビティの onStop() が呼び出されますが、onDestroy() は呼び出されません。このプロセスはバックグラウンド プロセスです。
空のプロセス
// 空のプロセス:
改善されたプロセスには実行中のデータがなく、メモリ空間に保持され、システムによって強制終了されていません。プロセスは簡単に殺されます。
Androidスレッド間で通信する方法は何ですか
- 共有変数 (メモリ)
- パイプライン
- ハンドラー機構
- runOnUiThread(実行可能)
- view.post(実行可能)
Devik プロセスと Linux プロセスの違い
// Davik プロセス:
- Dalvik 仮想マシンは Linux システムで実行されます。
- Davik プロセスは、Linux オペレーティング システムのプロセスであり、Linux プロセスに属します。
- 各 Android アプリケーション プロセスには、Dalvik 仮想マシン インスタンスがあります。これの利点は、Android アプリケーション プロセスが相互に影響を与えないことです。つまり、Android アプリケーション プロセスが予期せず終了しても、他のアプリケーション プロセスの通常の動作には影響しません。
注: 各 Android アプリケーションは、独立した Dalvik 仮想マシンに対応します。// Linux プロセス:
- 独立したカーネル スタックと独立したストレージ スペースを持ち、オペレーティング システムにおけるリソース割り当てとスケジューリングの最小単位です。
- プロセス単位で、システム リソースが割り当てられ、プログラムがスケジュールされます。
- プログラムを実行すると、アプリケーションを実行するためのプロセスが作成され、リソースの割り当てと解放が伴います。
プロセス キープ アライブ (アンデッド プロセス)
現在の Android プロセス キープ アライブ メソッドは、主に黒、白、グレーの 3 種類に分けられます。
黒のキープアライブ: 異なるアプリ プロセスがブロードキャストによって相互にウェイクアップします (システムが提供するブロードキャストを使用してウェイクアップすることを含む)
白のキープアライブ: フォアグラウンド サービスを開始します
灰色のキープアライブ: システムの脆弱性を利用してフォアグラウンド サービスを開始します
ブラックキープアライブ
いわゆるブラック キープ アライブは、異なるアプリ プロセスを使用して、ブロードキャストによって互いにウェイク アップすることです。
- シナリオ 1: 起動時、ネットワークの切り替え時、写真の撮影、ビデオの撮影時に、システムによって生成されたブロードキャストを使用してアプリをウェイクアップする
- シナリオ 2: サードパーティの SDK にアクセスすると、対応するアプリ プロセスも起動されます.たとえば、WeChat SDK は WeChat を起動し、Alipay SDK は Alipay を起動します. ここから広がり、次のシーン 3 を直接トリガーします。
- シナリオ 3: Alipay、Taobao、Tmall などの Ali ベースのアプリが携帯電話にインストールされている場合、Ali ベースのアプリを開くと、他の Ali ベースのアプリが起動することがあります。(アリを例に挙げてみましょう。実際、BAT部門も同様です)
白色保活
// ホワイト キープ アライブ
ホワイト キープ アライブ メソッドは非常に単純です。システム API を呼び出して、フォアグラウンドでサービス プロセスを開始します。これにより、システムの通知バーに通知が生成され、そのようなことがユーザーに通知されます。アプリが実行されています
灰色保活
// グレイ キープ アライブ
グレイ キープ アライブ、この種のキープ アライブ メソッドは最も広く使用されています。システムの脆弱性を利用してサービスプロセスをフォアグラウンドで起動するため、通常の起動方法と異なり、システム通知バーに通知が表示されず、バックグラウンドでサービスプロセスが実行されているように見える点が異なります。これの利点は、ユーザーがフォアグラウンド プロセスを実行していることに気付かない (通知が表示されないため) ことですが、プロセスの優先度は通常のバックグラウンド プロセスよりも高くなります。システムの抜け穴を利用する方法、一般的な実装のアイデアとコードは次のとおりです:
アイデア 1: API < 18、フォアグラウンド サービスの開始時に直接 new Notification() を渡す;
アイデア 2: API >= 18、フォアグラウンド サービスと同時に同じ ID で 2 つの通知を開始し、後で開始するサービスを停止します。
ネットワーク内のプロセス間で通信する方法は?
// 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:
1.消息传递(管道、FIFO、消息队列)
2.同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
3.共享内存(匿名的和具名的)
4.远程过程调用(Solaris门和Sun RPC)
在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。
其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,
而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。
这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。