問題タブ [intentservice]
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 - IntentService ワーカー スレッドを手動で終了する
IntentService onHandleIntent メソッドを手動で終了するのに問題があります。残りのスレッドの実行に不可欠な例外をキャッチしています。例外をキャッチしたときにスレッドを停止したいと考えています。stopSelf() を呼び出すか、onDestroy() を直接呼び出してみましたが、これはおそらく非常に悪い方法であると確信していますが、機能していません。スレッドはそれらを呼び出して続行します。
誰でもこれを行う方法について良いアイデアはありますか?
android - Eclair2.1を使用したIntentServiceの許可
パーミッションメカニズムを使用して発信者に制限を適用する2つのアプリをAndroidで作成しています。
Froyo 2.2以降では完全に機能しますが、Eclair2.1では機能しません。
最初のアプリ(呼び出し元)はマニフェスト<uses-permission ... />
にあり、2番目のアプリ(呼び出される)はで新しい権限を定義し<permission .... />
ます。
誰かがEclair2.1で同じ問題を抱えていますか?
2.1のみのエミュレーター(GoogleAPIを使用した2.1-update1および2.1update1)でのテストに使用しています。
これはlogcatからのエラーです:
Froyoとは異なり、apkをインストールすると、新しい権限に関するログが記録されません。
アプリのマニフェストは次のとおりです。
Pkg1(発信者)
Pkg2
そして、サービス定義では:
私はprotectionLevel値でテストしました:通常、署名、危険。ありがとう。
android - Service/IntentService/AsyncTask/Looperのキャンセル方法
私はここで発狂します。簡単なことをしたい - 長いタスク (Web から複数のデータ オブジェクトをフェッチする) があり、それをキャンセルする機能が必要です。私はたくさんのことを(たくさん)試しましたが、何もうまくいきません
流れは次のようになります。
ユーザーがボタンをクリックする
AsyncTask
作業を開始します ( 、Service
、IntentService
およびで試しましたLooper
)タスクは、進行状況の更新に関する進行中の通知を追加することを含め、すべてを処理します
通知の意図には、進行中のタスクをキャンセルすることだけが目的であるという新しいアクティビティの呼び出しがあります。
stopService()
cancelActivityで Service/IntentService を呼び出そうとしたりLooper.quit()
、Looper を実行しようとしました (AsyncTask で何を試したか覚えていません。キャンセルするための API があるかどうかはわかりません)。
私の観点では、最良のオプションは使用することですIntentService
(いくつかのタスクを並べることができ、IntetService は希望どおりにそれを実行します)が、あらゆるタイプの実装の提案を受け入れます-私は何を気にしませんコードは、タスクをキャンセルするオプションがあるというだけです
よろしくお願いいたします。
ドロール
(私は寝ます - 同じ問題で8時間は多すぎます)
android - onHandleIntent の前に IntentService インテントをキャプチャする
Web サービスの呼び出しをキューに入れる IntentService があります。実行する Web サービス呼び出しのタイプを定義する各 Intent で整数を Extra として渡します。
特定の Web サービスを実行するための Intent が IntentService に渡され、同じ Web サービスの Intent が IntentService キューに既に存在する場合、Intent が処理されない状況を作成したいと考えています。理想的には Intent を破棄しますが、Extra を追加して、処理後に Intent をスキップすることをコードに知らせることもできます。インテントが入ってくると、IntentService に追加したオブジェクトのキューにどれが入っているかを追跡できます。
ただし、IntentService に渡されたときに Intent をインターセプトする場所がわかりません。私が知る限り、 onHandleIntent が呼び出されたときにしか触れることができず、それでは遅すぎます。
何か案は?
android - IntentServiceのライフサイクル
DrupalServicesモジュールへの非同期呼び出しを処理するIntentServiceがあります。現在、onHandleIntentでDrupalXmlRpcServiceオブジェクトを毎回初期化しています。これは、スレッドの終了後にサービスが強制終了されるという印象を受けたためです。このオブジェクトは、IntentServiceオブジェクトのコンストラクターで初期化する必要がありますか?
android - インテントサービスがまだ実行されているか、実行を停止したかどうかを確認する方法
キュー内のすべてのインテントサービスが「消費」されているかどうかを知る必要があります。または、他の方法は、すべてのサービスの実行が停止するまで続行しないように、それがまだ何かを実行しているかどうかを確認することです。何か案は?
android - Notification.deleteIntent の使用方法
通知がいつクリアされるかを検出しようとしています。私の質問は、私がやろうとしていることを概説するこの回答を直接参照しています。これが私がアクションを実装する方法です:
これは CleanUpIntent クラスです。
その後、通常のように通知を起動するだけですが、テストしてみると ([すべての通知をクリア] を押します)、何も起こりません。IntentService の開始時に LogCat に何かを出力するコード行を挿入しましたが、何も実行されませんでした。これは私が Notification.deleteIntent を使用する方法ですか?
android - Broadcasts、ContentProviders、および ContentReciever のベスト プラクティス
わかりましたので、前もって私は Android が初めてだと言います。私はいくつかの小さなプロジェクトを作成し、いくつかのことで遊んで、たくさんの読書をしました。だからここに私が達成しようとしているタスクがあります:
Wi-Fi ネットワークを介して他の Android デバイスと情報を送受信できる、電話のフォアグラウンドで実行されるリモート サービスがあります。このサービスを使用するために構築されたスマートフォンの APK には、複数の SQLite DB が含まれています。これらの APK がコンテンツ プロバイダーをサービスに登録して、サービスが受信したデータをどこに置くかを常に認識できるようにしたい (私はこのタスクを完了しました)。データが入ってきたら、それがどこに属しているかを特定し、適切な DB に配置します (ここでは問題ありません)。では、新しいデータが受信されたことを正しいアクティビティに通知する最善の方法は何でしょうか。自分のサービスが呼び出すブロードキャスト レシーバーを登録する必要がありますか? APK が OS によって強制終了された場合、ブロードキャスト レシーバーは機能しますか? 正しいアクティビティが読み込まれたら、コンテンツ オブザーバーを使用して新しいデータを表示しますか? IntentServices を使用する理由
質問が多くてすみません。私が言ったように、私は速く学んでいますが、Android の SKD は大規模であり、非常に多くの優れた機能があります。ベスト プラクティスに基づいて物事を正しく考え、これを非常に簡単に保守および拡張できるようにしたいと考えています。私が得ることができる助けやアドバイスをありがとう。
android - Android:無限ループ内でシーケンシャルスレッドを適切に管理する方法
IntentService
内部に無限ループを作成しonHandleIntent
、静的メソッドstart、resume、pause、stopを追加して、アクティビティ内で直接呼び出します。
シナリオは、無限ループ内で、長いプロセスを実行するための新しいスレッドを作成するコールバックメソッドを呼び出しています。
問題は、無限ループが原因でスレッドが継続的に作成されることを心配していることです。私はそれを管理するためのより良い方法があるとかなり確信しています。ThreadPoolか、1つのスレッドだけを順番に使用できるものを考えています。そのため、時間、メモリ、オーバーヘッドなどを節約できます。
他のアプローチは大歓迎です。必要に応じて他の情報を聞いてください。次に、ここで更新します。
これが私のコードです(SampleCallbackを見てください):
IntentService
SampleCallback
UPDATES1 私はグーグルAPIとは別にロケーションAPIを使用しています。Androidライブラリプロジェクトを作成し、そのAPIを使用して、バックグラウンドで最新の場所(2秒ごとなど)を取得します。
アプリケーション側では、静的メソッドを呼び出して使用する必要があります(たとえば、start(context、callback)、pause()、resume()、stop())。場所を取得するためのコールバックがあります。ロケーションオブジェクトから必要な情報を取得した後、自分で作成したコールバック(アプリケーション側で実装)を呼び出すための新しいスレッドを作成します。
android - IntentServiceの進捗状況を取得する
多くのAPI呼び出しを必要とするAndroidアプリに取り組んでいます。IntentServiceに基づいてキューイングシステムを実装するシステムを構築しました。重要なのは、IntentServiceの実行中に正確なProgressBarの更新を表示したいということです。
1つの方法は、キューイングシステムを一連のAsyncTasksに変更することです。を使用して進捗状況を表示する必要がありonProgressUpdate()
ます。
もう1つの方法は、IntentServiceを微調整し、バックグラウンドスレッドから進行状況を取得することです。
重要なのは、IntentServiceとAsyncTaskの優れた機能を組み合わせたいということです。UIイベントを簡単に処理するキューイングシステムを作成します。それを実装するための最良の方法はありますか?
編集: IntentServicesの代わりにAsyncTasksを使用することになりました。それでも、IntentServiceからの進捗状況を更新するために共有できる良いパターンがある場合は、コメントを追加してください。