Android学習(3)-4大コンポーネントのBroadcastReceiver
10143 ワード
BroadcastReceiverベースの使用 BroadcastReceiverベース使用 BroadCastReceiver概要 BroadcastReceiverの実現原理 BroadcastReceiver を定義 BroadcastReceiverの登録 静的登録 動的登録 静的登録と動的登録の違い ブロードキャスト を送信 onReceiveContext contextIntent intentメソッド について
BroadCastReceiverの概要
ブロードキャスト受信機(BroadCastReceiver)は、プライマリ・スレッドで実行され、グローバル・ブロードキャストを監視します.
Androidの4つのコンポーネントの1つとして、BroadCastReceiverは重要な役割を果たしています.一般的には、プッシュを受信したり、プロセス間通信などの直接通信操作が不便な場所や、不定時に完了したトランザクションを傍受したりするために使用されます.
放送には主に2種類あります.秩序放送と無秩序放送です.無秩序放送:放送のintentに一致するすべての放送受信者はこの放送を受信することができ、しかも前後順がなく、効率的に行うが、受信者は放送 を伝達することができず、遮断することもできない.秩序放送:放送のintentに一致するすべての放送受信者はこの放送を受信することができるが、放送受信者の優先度に従って受信の前後順序を決定し、各受信者は修正して修正した放送を次の受信者に伝える権利があり、ブロックすることもできる.
BroadcastReceiverの実現原理
以前使っていたときは実現原理は気にしていませんでしたが、知っていました.
ブロードキャストの設計モードは標準的なオブザーバモードであり、ブロードキャストにとって最も重要なのはAndroidのAMS(ActivityManagerService)であり、メッセージ配信者はAMSに登録され、Binderメカニズムによってブロードキャストが送信され、AMSは登録リストで適切な受信者を見つけ、ブロードキャストを受信者のメッセージループキュー(BroadcastQueue)に送信し、ブロードキャスト受信者はメッセージループを通じてブロードキャストを受け取り、コールバックメソッドonReceive()を呼び出す.
Created with Raphal2.1.0パブリッシャーAMS受信者受信者登録ブロードキャスト適切な受信者を探して適切な受信者を見つけてブロードキャストを受信者メッセージキューメッセージループに送信
この観察者モードはキックアスで、びっくりして急いでこの設計モードがどのように使われているかを見に行きました.
BroadcastReceiverの定義
ブロードキャスト受信機を定義するのは簡単ですまずクラスを新規作成し(個別ファイルのクラスか内部クラスかは使用シーンによって異なりますが)、BroadcastReceiverクラス を継承します.書き換え中のonReceiveメソッド
BroadcastReceiverの登録
Androidの4つのコンポーネントの1つとして、あなたのActivityとServiceはすべてManifestの中で登録して、私のBroadcastReceiverは登録しないならば、私はメンツが要りませんか?
BroadcastReceiverの登録には、静的登録と動的登録の2種類があります.
静的登録
静態登録実AndroidManifestに
このappが最初に起動すると、ブロードキャスト受信機の実装クラスが自動的にインスタンス化され、システムに登録されます.
動的登録
マニフェストにラベルを付けず、コードにContextを動的に呼び出すregisterReceiver()メソッドです.
動的ブロードキャストはメモリ漏洩防止のためにログアウトが必要なのでonResumeメソッドに登録することを推奨し、onPauseメソッドにログアウトすると同時に重複登録し、重複ログアウトも許可しない
onResume()に登録、onPause()のログアウトは、onPause()がAppが死ぬ前に必ず実行されるため、ブロードキャストがAppが死ぬ前にログアウトされることを保証し、メモリ漏洩を防止します.
静的登録と動的登録の違い両方式の登録方式が異なる 静的:manifestに を登録する動的:コードに を登録する
両方式の傍受範囲が異なる 静態:ブロードキャスト を常時傍受する動的:特定の時点でブロードキャスト を傍受する
のライフサイクルが異なります 静的:バックグラウンドに常駐し、コンポーネントのライフサイクルの影響を受けず、消費電力がメモリに多く含まれる 動的:部常駐、柔軟、コンポーネントのライフサイクル変化に従い、いったん除去するとブロードキャスト を受け入れない
ブロードキャストの送信
ブロードキャストはsendBroadcast()メソッドによりIntentを伝送ツールとして送信される
放送は主に5種類に分けられます.一般放送 システムブロードキャスト 秩序放送 粘性放送 アプリケーション内ブロードキャスト 一般放送
NROMAL_ACTIONはあなたが前に登録した放送イベントです
システムほうそう
これは手動で送信するのではなく、システムがデフォルトで送信しているので、傍受するだけでいいです.
具体的な操作
アクション名
ネットワークの変化を監視
android.net.conn.CONNECTIVITY_CHANGE
フライトモードをオフまたはオンにする
Intent.ACTION_AIRPLANE_MODE_CHANGED
充電時または電力量が変化する
Intent.ACTION_BATTERY_CHANGED
バッテリ消費電力が低い
Intent.ACTION_BATTERY_LOW
バッテリーの充電量が十分である(すなわち、低消費電力から満タンに変化した場合に放送される)
Intent.ACTION_BATTERY_OKAY
システム起動完了後(1回のみ放送)
Intent.ACTION_BOOT_COMPLETED
写真撮影時の撮影ボタン(ハードウェアボタン)を押すと
Intent.ACTION_CAMERA_BUTTON
スクリーンロック
Intent.ACTION_CLOSE_SYSTEM_DIALOGS
デバイスの現在の設定が変更された場合(インタフェース言語、デバイス方向など)
Intent.ACTION_CONFIGURATION_CHANGED
イヤホン挿入時
Intent.ACTION_HEADSET_PLUG
SDカードが正しく取り外されていないが取り出された場合(正しく取り外される方法:設定–SDカードとデバイスメモリ–SDカードのアンインストール)
Intent.ACTION_MEDIA_BAD_REMOVAL
SDカードなどの外部記憶装置の挿入
tent.ACTION_MEDIA_CHECKING
APKの正常なインストール
Intent.ACTION_PACKAGE_REMOVED
APKの削除に成功しました
Intent.ACTION_BATTERY_CHANGED
デバイスの再起動
Intent.ACTION_REBOOT
画面が閉じられました
Intent.ACTION_SCREEN_OFF
画面が開きます
Intent.ACTION_SCREEN_ON
システムを閉じるとき
Intent.ACTION_SHUTDOWN
デバイスの再起動
Intent.ACTION_REBOOT
システムブロードキャストを使用する場合は、ブロードキャスト受信者を登録する際に関連するactionを定義するだけでよく、手動でブロードキャストを送信する必要はなく、システムに関連する操作がある場合に自動的にシステムブロードキャストを行う
ちくじほうそう
送信された放送は放送受信者によって前後順に受信され,ここでの順序は受信者に対するものである.放送受信の順序規則 Priority属性の値に従って、大きいから小さいまで 並べ替えます. Priority属性の値と同時に、動的に登録されたブロードキャスト優先
使用方法
アプリケーション内ブロードキャストブロードキャスト登録時にexported属性をfalseに設定し、本App内部で発行されていないブロードキャストが受信されないようにする. がブロードキャストを送信ときにそのブロードキャスト受信機が存在するパケット名を指定し、このパケットのApp内で一致する有効なブロードキャスト受信機にのみ、intentを介して送信.setPackage(packageName)指定応募 ブロードキャストの送信と受信時に、対応する権限permissionを増設し、権限検証に使用する.
上記以外にもLocalBroadcastManagerをご利用いただけます
使用方式はグローバルブロードキャストとほぼ同じであるが、登録/登録解除ブロードキャスト受信機と送信ブロードキャスト時にパラメータのcontextをLocalBroadcastManagerの単一インスタンスとして使用し、LocalBroadcastManager方式で送信されるアプリケーション内ブロードキャストについてはLocalBroadcastManagerによる動的登録のみであり、 を静的に登録することはできない.
onReceive(Context context,Intent intent)メソッドについて
異なる登録方式のブロードキャスト受信機コールバックOnReceive(Context context,Intent intent)におけるcontext戻り値は異なる静的登録(グローバル+アプリケーション内ブロードキャスト)について、コールバックonReceive(context,intent)のcontext戻り値は、ReceiverRestrictedContext; グローバルブロードキャストの動的登録について、コールバックonReceive(context,intent)のcontext戻り値は、Activity Context; アプリケーション内ブロードキャストの動的登録(LocalBroadcastManager方式)、コールバックonReceive(context,intent)のcontext戻り値は、Application Contextである. アプリケーション内ブロードキャストの動的登録(非LocalBroadcastManager方式)、コールバックonReceive(context,intent)のcontext戻り値は、Activity Context;
BroadCastReceiverの概要
ブロードキャスト受信機(BroadCastReceiver)は、プライマリ・スレッドで実行され、グローバル・ブロードキャストを監視します.
Androidの4つのコンポーネントの1つとして、BroadCastReceiverは重要な役割を果たしています.一般的には、プッシュを受信したり、プロセス間通信などの直接通信操作が不便な場所や、不定時に完了したトランザクションを傍受したりするために使用されます.
放送には主に2種類あります.秩序放送と無秩序放送です.
BroadcastReceiverの実現原理
以前使っていたときは実現原理は気にしていませんでしたが、知っていました.
ブロードキャストの設計モードは標準的なオブザーバモードであり、ブロードキャストにとって最も重要なのはAndroidのAMS(ActivityManagerService)であり、メッセージ配信者はAMSに登録され、Binderメカニズムによってブロードキャストが送信され、AMSは登録リストで適切な受信者を見つけ、ブロードキャストを受信者のメッセージループキュー(BroadcastQueue)に送信し、ブロードキャスト受信者はメッセージループを通じてブロードキャストを受け取り、コールバックメソッドonReceive()を呼び出す.
Created with Raphal2.1.0パブリッシャーAMS受信者受信者登録ブロードキャスト適切な受信者を探して適切な受信者を見つけてブロードキャストを受信者メッセージキューメッセージループに送信
この観察者モードはキックアスで、びっくりして急いでこの設計モードがどのように使われているかを見に行きました.
BroadcastReceiverの定義
ブロードキャスト受信機を定義するのは簡単です
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//
}
}
BroadcastReceiverの登録
Androidの4つのコンポーネントの1つとして、あなたのActivityとServiceはすべてManifestの中で登録して、私のBroadcastReceiverは登録しないならば、私はメンツが要りませんか?
BroadcastReceiverの登録には、静的登録と動的登録の2種類があります.
静的登録
静態登録実AndroidManifestに
ラベルを追加<receiver
// true, false
android:enabled=["true" | "false"]
// APP , intent-filter true, false
android:exported=["true" | "false"]
// , application icon
android:icon="drawable resource"
android:label="string resource"//
// ( , ; .CLASSNAME, manifest )
android:name="string"
// 。
android:permission="string"
。
android:process="string">
<intent-filter>
// action,
<action android:name="actionName" />
intent-filter>
receiver>
このappが最初に起動すると、ブロードキャスト受信機の実装クラスが自動的にインスタンス化され、システムに登録されます.
動的登録
マニフェストにラベルを付けず、コードにContextを動的に呼び出すregisterReceiver()メソッドです.
private MyBroadcastReceiver mBroadcastReceiver;
@Override
protected void onResume(){
super.onResume();
mBroadcastReceiver = new MyBroadcastReceiver ();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);
registerReceiver(mBroadcastReceiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mBroadcastReceiver);
}
動的ブロードキャストはメモリ漏洩防止のためにログアウトが必要なのでonResumeメソッドに登録することを推奨し、onPauseメソッドにログアウトすると同時に重複登録し、重複ログアウトも許可しない
onResume()に登録、onPause()のログアウトは、onPause()がAppが死ぬ前に必ず実行されるため、ブロードキャストがAppが死ぬ前にログアウトされることを保証し、メモリ漏洩を防止します.
静的登録と動的登録の違い
ブロードキャストの送信
ブロードキャストはsendBroadcast()メソッドによりIntentを伝送ツールとして送信される
放送は主に5種類に分けられます.
Intent intent = new Intent();
intent.setAction(NROMAL_ACTION);
sendBroadcast(intent);
NROMAL_ACTIONはあなたが前に登録した放送イベントです
システムほうそう
これは手動で送信するのではなく、システムがデフォルトで送信しているので、傍受するだけでいいです.
具体的な操作
アクション名
ネットワークの変化を監視
android.net.conn.CONNECTIVITY_CHANGE
フライトモードをオフまたはオンにする
Intent.ACTION_AIRPLANE_MODE_CHANGED
充電時または電力量が変化する
Intent.ACTION_BATTERY_CHANGED
バッテリ消費電力が低い
Intent.ACTION_BATTERY_LOW
バッテリーの充電量が十分である(すなわち、低消費電力から満タンに変化した場合に放送される)
Intent.ACTION_BATTERY_OKAY
システム起動完了後(1回のみ放送)
Intent.ACTION_BOOT_COMPLETED
写真撮影時の撮影ボタン(ハードウェアボタン)を押すと
Intent.ACTION_CAMERA_BUTTON
スクリーンロック
Intent.ACTION_CLOSE_SYSTEM_DIALOGS
デバイスの現在の設定が変更された場合(インタフェース言語、デバイス方向など)
Intent.ACTION_CONFIGURATION_CHANGED
イヤホン挿入時
Intent.ACTION_HEADSET_PLUG
SDカードが正しく取り外されていないが取り出された場合(正しく取り外される方法:設定–SDカードとデバイスメモリ–SDカードのアンインストール)
Intent.ACTION_MEDIA_BAD_REMOVAL
SDカードなどの外部記憶装置の挿入
tent.ACTION_MEDIA_CHECKING
APKの正常なインストール
Intent.ACTION_PACKAGE_REMOVED
APKの削除に成功しました
Intent.ACTION_BATTERY_CHANGED
デバイスの再起動
Intent.ACTION_REBOOT
画面が閉じられました
Intent.ACTION_SCREEN_OFF
画面が開きます
Intent.ACTION_SCREEN_ON
システムを閉じるとき
Intent.ACTION_SHUTDOWN
デバイスの再起動
Intent.ACTION_REBOOT
システムブロードキャストを使用する場合は、ブロードキャスト受信者を登録する際に関連するactionを定義するだけでよく、手動でブロードキャストを送信する必要はなく、システムに関連する操作がある場合に自動的にシステムブロードキャストを行う
ちくじほうそう
送信された放送は放送受信者によって前後順に受信され,ここでの順序は受信者に対するものである.
使用方法
sendOrderedBroadcast(intent);
アプリケーション内ブロードキャスト
上記以外にもLocalBroadcastManagerをご利用いただけます
//
// 1: BroadcastReceiver & IntentFilter
MyBroadcastReceiver mBroadcastReceiver = new MyBroadcastReceiver ();
IntentFilter intentFilter = new IntentFilter();
localBroadcastManager = LocalBroadcastManager.getInstance(this);
// 3:
intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);
// 4: LocalBroadcastManager registerReceiver()
localBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);
//
localBroadcastManager.unregisterReceiver(mBroadcastReceiver);
//
intent.setAction(BROADCAST_ACTION);
localBroadcastManager.sendBroadcast(intent);
onReceive(Context context,Intent intent)メソッドについて
異なる登録方式のブロードキャスト受信機コールバックOnReceive(Context context,Intent intent)におけるcontext戻り値は異なる