アンドロイドベースの放送


ブロードキャスト
システムレベルのメッセージ通知を容易にするためにandroidは、ブロードキャストのようなメッセージメカニズムを導入した.ブロードキャストのタイプ:秩序と無秩序(標準ブロードキャスト)
無秩序:完全に非同期で実行されるブロードキャストで、ブロードキャストが発行されると、すべてのブロードキャスト受信機がほぼ同じ時刻にこのブロードキャストを受信します.彼らの間には前後の順序がなく、効率が高いが、遮断できないことを意味している.
≪順序付け|Order|emdw≫:同期して実行されるブロードキャストです.ブロードキャストが送信された後、同じ時刻に1つの受信機のみがこのブロードキャストを受信することができ、受信機が処理された後にブロードキャストが継続して伝達され、受信機は前後順であり、優先度を設定することができ、ブロードキャストはいの後の受信機がブロードキャストを受信できないことを遮断することができる.
受信システムブロードキャストandroidには多くのシステムのブロードキャストが内蔵されており、これらのブロードキャストをアプリケーションで傍受してシステムの状態情報、例えば起動ブロードキャスト、電力変化ブロードキャスト、ネットワーク変化ブロードキャストを得ることができる.登録ブロードキャストには、動的登録と静的登録の2つの方法があり、コードに動的登録として登録され、AndroidManifestに静的登録として登録されたブロードキャスト受信機は、自由に制御してログアウトすることができ、柔軟性が高く、プログラムが開始された後、静的登録が逆にならなければならないという欠点がある.Android manifestではExport属性がこのブロードキャスト受信機受信プログラム以外のブロードキャストを許可するかどうかを示し、Enable属性がこのブロードキャスト受信機を有効にするかどうかを示す:公式サイトBrocastReceiver:onReceiver()メソッドに論理や時間のかかる操作を追加しすぎないでください.ブロードキャスト受信機はスレッドを開くことができないため、onReceiver()メソッドが長く実行され、終了しない場合、プログラムはエラーを報告します.したがって、ブロードキャスト受信機の多くは、他のコンポーネントを開く役割だけです.
アンドロイドシステムのブロードキャストはグローバルブロードキャストに属し、他のアプリケーションに傍受され、カスタマイズされたブロードキャストも他のプログラムに傍受され、セキュリティの問題を引き起こしやすいと述べた.ここでは,この問題を解決するために,ローカルブロードキャスト,アンドロイドローカルブロードキャストメカニズムを用いることができ,送信されたブロードキャストは本アプリケーション内でしか伝播できず,受信機は本プログラム内のブロードキャストしか受け入れられない.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance( this ) ;
       
LocalBroadcastManager.registerReceiver( broadcastReceiver , intentFilter );

    
LocalBroadcastManager.sendBroadcast( intent ) ;

         
LocalBroadcastManager.unregisterReceiver( broadcastReceiver );

ローカルブロードキャストは静的に登録できないことも理解できるが、静的登録は主にプログラムが起動していない場合でもブロードキャストを受信できるためであり、ローカルブロードキャストが送信された場合、プログラムはすでに起動しているに違いない.利点:1送信されたブロードキャストは自分のApp内でしか伝播せず、他のAppに漏洩しないこと、プライバシーデータが漏洩しないことを確保すること2他のAppもあなたのAppにこのブロードキャストを送信できないこと、他のAppが破壊する心配はありません3システムのグローバルブロードキャストよりも効率的です
放送実践強制ラインオフ
public class ActivityCollector { public static List sActivityList=new ArrayList<>();
public static void AddActivity(Activity activity) {
   sActivityList.add(activity);
}

public static void removeActivity(Activity activity) {
    sActivityList.remove(activity);
}

public static void FinishAll() {
    for (Activity activity : sActivityList) {
        if (!activity.isFinishing()) {
            activity.finish();
        }
    }
}

}
メインインタフェースで強制終了が必要な場所に行ってブロードキャストを送信し、baseActivityでブロードキャストを登録し、ブロードキャストをログアウトし、このブロードキャスト受信者のonreciverメソッドでActivity Collectorを行う.finishAll()は、対応する必要があるインタフェースを再起動し、一般的にインタフェースにログインします.