問題タブ [localbroadcastmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - LocalBroadcastManager と Otto を使用した場合のパフォーマンスの比較
AndroidでLocalBroadcastManager
とを使用した場合のパフォーマンスを比較しようとしています。Otto
私が知っているように、Otto はアノテーションと Java リフレクションを使用しているため、パフォーマンスに何らかの影響がある可能性があります。これら2つの方法のパフォーマンスを測定するために何かを提案できますか? バッテリーを消耗するのはどれ?
android - LocalBroadcastManager onReceive() が呼び出されていません
これは私がやっていることです:
を使用しMainActvity
てからインテントを送信しています。Fragment クラスのコードを書きました。でレシーバーの登録を解除しています。Fragment
LocalBroadcastManager
onReceive()
onCreateView()
onDestroy()
しかしonReceive()
、呼び出されていません。なんで?
MainActivityクラス:
私のフラグメントクラスで:
その受信者が呼び出されないのはなぜですか? 何か助けてください。
android - アクティビティ、サービス、およびその間のコミュニケーションの種類は?
アクティビティとサービスで構成される Android アプリケーションを開発しようとしています。アクティビティは、アクティビティから閉じられる無期限のサービスでプロセスを起動します。サブクラス IntentService を使用しないで、直接 Service. onStartCommand および OnDestroy によって制御されます。
明らかに、Activity から Service に情報を渡す必要があります。Service のステータスといくつかの文字列です。
LocalBrodcastManager を使用しようとしましたが、デバイスをオンにしたり、アクティビティが onPause 状態になったりすると、メッセージが失われます。いくつかの例に従おうとしましたが、ほとんど成功しませんでした。これは特に、明らかに明らかであると思われるいくつかの情報が欠落しているため、完了できませんでしたが、私には明らかではありません: https ://developer.android.com/training/run-background-service/report-status.html
次に、IBinder 経由で Messenger を使用しようとしました (例: Messaging を使用したアクティビティとサービスの間の通信) が、プログラムが少し複雑に思えて、自分のニーズに合わせることができません。
必要なのは、アクティビティからサービスを起動することです (メッセンジャーを使用する場合は、おそらく自動的にバインディングを作成しますか?)。サービスは、アクティビティがアクティブであることを通知し、サービスは GPS LocationListener を介していくつかのポイントを記録し、それをファイルに書き込み、再度、アクティビティ、記録中のデータ、ファイル サイズなどを指摘する必要があります。
この情報を渡すために何を使用することをお勧めしますか?また、いくつかの例を教えていただけますか?
android - サポートライブラリのみのLocalBroadcastManager?
Android アプリで、いくつかの通知をブロードキャストしたいと考えています。メッセージを処理するMainActivity
登録しますが、アプリからメッセージを送信したくない場合はBroadcastReceiver
グローバルを使用することはお勧めしません。BroadcastReceiver
この代わりにLocalBroadcastManager
orHandler
を使用する必要があります。私の場合LocalBroadcastManager
はより適していますが、ドキュメントによると、サポート ライブラリの一部です。
私のアプリは Android 4 と 5 のみをサポートしているため、サポート ライブラリは使用していません。LocalBroadcastManager
サポート ライブラリなしで使用する方法はありますか? ありがとう
android - Android でブロードキャスト レシーバーを重複して登録しないようにする
初めての Android アプリを作成しようとしています。メインスレッド アクティビティ (私の場合: ActionBarActivity) がバックグラウンド アクティビティ (私の場合: IntentService) からイベントの通知を受け取るようにしたいと考えています。これを行うには、ブロードキャストを使用するのが最善の方法であると読んだことがあります。
バックグラウンド アクティビティから送信されたブロードキャストをリッスンするブロードキャスト レシーバーを登録するには、メイン スレッド アクティビティ内で次のコードを使用します。
これをメイン スレッド アクティビティの onCreate() メソッドに入れてみましたが、アクティビティを再起動するたびに (アプリを閉じて再度開くなど)、「重複した」ブロードキャスト レシーバーが作成されているように見えることがすぐにわかりました。次に、単一のブロードキャストが送信されるたびに、ブロードキャスト レシーバーの onReceive() メソッドを複数回トリガーします。これが問題を引き起こしています。
そのため、重複の作成を避けるために、すでにブロードキャスト レシーバーを作成したかどうかを記憶するブール値を保存する SharedPreferences ファイルを作成しました。もちろん、デバイスを再起動するまで、これは期待どおりに機能します。その後、ブロードキャストレシーバーが破棄され、SharedPreferences ブール値が既にあると言うため、アプリは新しいものを作成しません。
デバイスの再起動をリッスンするように新しいブロードキャスト レシーバーをセットアップして、SharedPreferences ブール値をリセットすることで、この問題にパッチを当てることができると思いますが、物事を非常に複雑にしすぎているというしつこい感じがします。私は何が欠けていますか?助けてくれてありがとう!!
android - Android IntentService/Web サービスにデータを要求/送信し、進行状況を UI に取得するサービス
基本的に Android では、Web サービスからデータをアップロード/ダウンロードしようとしており、進行状況のパーセンテージを示す進行状況バーをレンダリングする必要があります。
以下は、それらを検討する理由とともに私が実装したアプローチです。
- バックグラウンド
IntentService
で実行することを選択しました:リンクに よると、バインドされたアクティビティ/フラグメントが破棄されると破棄されるため、バインドされたサービスを使用できませんでした。したがって、IntentService
以上の選択Service
。移動は1回で、インテントサービスはワーカースレッドで機能するため、はるかに優れています。 - 更新を受信するブロードキャスト:上記
LocalBroadcastManager
から受信したブロードキャストをリッスンするように登録して、プログレス バー UI を更新する 実装。IntentService
ただし、このアプローチでは、次の問題に対処する必要があります。
ブロードキャストの順序は維持されません。ブロードキャストには、アップロード/ダウンロードの進行状況のパーセンテージが含まれます。しかし、順序が維持されていないため、古い更新を受信する可能性があります (例: 40% の後に 30% を受信する場合があります)。sendBroadcastSync
の方法も試してみましたLocalBroadcastManager
が、一貫して機能しません(これについてはよくわかりません)。したがって、私はMessenger
経由で実装しようとしHandler
ましたが、UI が再作成されると (Activitiy/Fragment が破棄されて作成されます)、進行中のアップロード/ダウンロードに再接続できないことがわかりました。基本的に、への参照Handler
は前のアクティビティ/フラグメントとともに失われるため、メッセージは更新のために UI に配信されません。
私はしばらくの間、自分の道を歩もうとしてきましたが、それを成し遂げることができません。あなたの知恵の言葉はとても役に立ちます。