Android のプロセスとスレッド

プロセス

  • フォアグラウンド プロセス
  • 目に見えるプロセス
  • サービスプロセス
  • 舞台裏のプロセス
  • 空のプロセス

フォアグラウンド プロセス

// フォアグラウンド プロセス

  1. 現在のプロセス アクティビティは、ユーザーと対話しています。
  2. 現在のプロセス サービスがアクティビティと対話しているか、現在のサービスが startForground() を呼び出してフォアグラウンド プロセスに属しているか、現在のサービスがライフサイクル (onCreate()、onStart()、onDestory()) を実行しています。
  3. プロセスは onReceive() メソッドを実行している BroadcostReceiver を保持します。

目に見えるプロセス

// 可視プロセス:

  1. プロセスは、もは​​やフォアグラウンドではなく、onPouse() 状態にあるアクティビティを保持しています。現在カバーされているアクティビティは、ダイアログの形式で存在します。
  2. プロセスには、可視のアクティビティにバインドされたサービスがあります。

サービスプロセス(サービスプロセス)

// サービス プロセス:
サービス サービスを開始するために 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地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

おすすめ

転載: blog.csdn.net/Mr_Gaojinchao/article/details/127873241