問題タブ [android-service-binding]
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 - 回転によるサービスの維持、アプリを終了する際の強制終了、および横向きでの画面のオフに関する問題
次の条件を満たす必要があるサービスがあります
1) アプリがフォアグラウンドにある間、サービスを実行する必要があります。
2) アクティビティが回転するときは、サービスを停止しないでください
3) 特定のフラグメントが開いているときにアプリを最小化しても、サービスはアクティブなままでなければなりません。
4) アクティビティが (ローテーションではなく) 停止され、それが特定のフラグメントではない場合、サービスを停止します。
onstart/onstop でサービスを開始/停止しています。画面が回転しているかどうかを追跡するためにブール値を使用することになりました。
このようにサービスを開始/停止しています
context.getApplicationContext().startService(インテント)
context.getApplicationContext().stopService(インテント)
1つの状況を除いて、完全に機能しました。
ランドスケープで画面をオフにすると、Android は何らかの理由でアクティビティ全体を再作成する必要があると判断し、ライフサイクル全体で呼び出します。4.4 と 5.0.1 の基本的なアプリでこれを再現しました。これは、このような他のスレッドで示されています。
画面がオフになったりオンになったりするときのライフサイクルを理解する問題
これを行うと、回転する/回転しないに依存することはできません。物事が非常に迅速に発生したため (複数の onStop/onStarts)、競合状態が発生していたと推測しています。アプリに戻ると、機能することもあれば、ハングすることもあり (エラーなし)、2 つのサービスが実行されていることもありました。
onStartに入ったときに画面がオフだったので、次にonStartが呼び出されたときに、回転としてフラグが立てられていた画面オフのレクリエーションから戻ってきていることがわかりました( Android は、縦向きのロック画面から横向きに戻していました)。それはばかげていて、うまく機能していませんでした。
あるスレッドは、ローテーションに耐えるためにヘッドレスフラグメントを使用することを提案しましたが、アプリを閉じたときに停止する必要があるため、同じ問題で立ち往生してしまいます。
これを解決するための推奨される方法はありますか? アプリが閉じている場合 (1 つのフラグメントを除く)、サービスをアクティブのままにしておくことはできません。これはバッテリーを大量に消費するだけであり、ローテーションを乗り切る必要があります。そうしないと、処理が中断されます。
android - ユーザーがアプリを長押しして強制終了した後でも、サービスとプロセスを開いたままにしておく方法
私は定期的にサーバーからデータを取得し、アプリを開かずにデータベースに入れたいので、アクティビティの有無にかかわらずサービスを常に開いてそれを認識したいと考えています。
だから私は自分のサービスを常にオープンにしたいと思っています。これは、サービスをアクティビティに制限しないことを意味しますが、現在、長押ししてアプリを終了すると、サービスが停止します。
誰かがそれを解決する方法を知っていますか。ありがとう WhatsApp Facebook のような多くのアプリがそれを行います。アプリを長押しして交換しても、サービスとプロセスはまだ終了していません。似たような機能が欲しい
java - バックグラウンド サービスを停止する方法
私は Android 開発を始めており、現在はサービスを学んでいます。
文字列を継続的にトーストする簡単なサービスを作成しました。
サービスの開始と停止には 2 つのボタンを使用しました。
開始ボタンをクリックすると、サービスが開始され、文字列が継続的にトーストされます。
しかし、停止ボタンをクリックしてサービスを停止しようとすると、停止しません。
ストリングを連続的にトーストし続けます。
これは、サービスを開始および停止するためのコードです
android - Android は、サービス クラスから MediaPlayer バッファの更新を検出します
Service クラス内に MediaPlayer を実装して、任意のアクティビティからプレーヤーにアクセスできるようにしました。任意のアクティビティで MediaPlayer を使用できるため、あるアクティビティから別のアクティビティに切り替えるときにバッファの更新を表示することが重要です。
バッファの更新を検出するために、サービス クラス内で OnInfo() メソッドを使用しました。
ここで sendBufferCompleteBroadcast() と sendBufferStartBroadcast() は Service クラスの外側で更新された値をチェックするための 2 つのブロードキャストです
このアプローチを使用した Activity クラスからの更新を確認するには、
しかし、これは正しく機能せず、他のアクティビティから別のアクティビティに切り替えるたびに、バッファの更新が多くなり、進行状況が表示されません。
android - OS によって開始されるのではなく、明示的にコードで NotificationListenerService を開始できますか?
NotificationListenerService から派生したクラスがあり、アプリの起動時に自動的に作成および開始されます。ただし、アクティビティから後でサービスを遅延して開始し、アプリの開始時に自動的に開始しないようにしたいと考えています。これを行うことは可能ですか?マニフェストは次のとおりです。
NotificationListenerService を使用する前に、ユーザーは設定を介してアプリの通知アクセスを許可する必要があることに注意してください。ただし、インテント フィルターがマニフェストから削除された場合、アプリは設定に表示されないため、ユーザーは権限を付与できず、権限がないとサービスを開始できません。OS は、アプリを設定に表示する前に、そのインテント フィルターが存在する必要があるようです。
更新: BIND_NOTIFICATION_LISTENER_SERVICE のドキュメントには次のように記載されています。
システムのみがそれにバインドできるようにするために、NotificationListenerService によって要求される必要があります。
つまり、OS だけが NotificationListenerService を開始でき、他の誰も開始できないことを意味すると思います。
android - Android サービスのキュー内のファイルを削除する
私のアプリでは、サーバーとの間でファイルをダウンロードおよびアップロードしたいと考えています。私はそれを行うためにサービスを使用しています。onStartCommand
コンテンツをダウンロードするスレッドを作成しています。保留中の意図を持つダウンロードの通知を表示しています。通知をクリックするProcessManager
と、アップロードとダウンロードの進行中のプロセスが表示されます。
私の問題は、アップロードまたはダウンロード キュー内のファイルをProcessManager
ページから削除したいということです。起動するたびにダウンロード状況を取得する必要があるため、インテント サービスを使用できません。私は両方を使用しましService and BindService
た。これを行う方法を教えてください。
android - サービスからデータベースを更新し、アクティビティの変更を処理します - どうやって?
シンプルなメッセージアプリがあります。サーバーからデータ (メッセージ) を受信するために Websockets 経由で STOMP を使用します。
すべての websockets をサービスに移動して、アクティビティにバインドしてメッセージを送信できるようにしたいと考えています。
Binder を使用すると、Activity で Service メソッドを実行できるため、メッセージの送信は問題になりません。問題は、メッセージを受信してアクティビティのビューに配置することです。
そのように、ローカルデータベースでそれを行いたいです:
- サービスは STOMP からメッセージを受け取ります
- サービスはそのメッセージをローカル データベースに配置します
- アクティビティは、データベースに新しいメッセージがあることを何らかの方法で理解し、それを ListView に入れます (CursorAdapter を使用しますか?)。
どうすればそれを達成できますか?たぶん、Activity と Service で同じデータベース ContentResolver を使用するようなものが必要ですか?
android - 破棄された後の Service オブジェクトはどうなりますか
サービスにバインドし、IBinder オブジェクトを介してそのサービスへのオブジェクト参照を取得したとします。参照を Activity オブジェクトにフィールドとして保存します。次に、サービスのバインドを解除して破壊します。サービスの破棄後、アクティビティ内のサービス参照は何を参照していますか?