3

私が電話したら

Intent intent = new Intent(ReadingActivity.this, AdService.class);
startService(intent);       

onCreateクラスのメソッド内から、クラスのメソッド内からMyActivityアクセスするにはどうすればよいですかMyActivity.thisonHandleIntent()IntentService

@Override
protected void onHandleIntent(Intent arg0) {
    // TODO Auto-generated method stub
    ((BookLib) getApplication()).createAd(I need to pass the calling activities context here);
}
4

2 に答える 2

11

IntentService クラスの onHandleIntent メソッド内から MyActivity.this にアクセスするにはどうすればよいですか

あなたはそうしない。

活動createAd()に移ります。時間が問題になる場合は、AsyncTaskではなく を使用してIntentServiceください。

これIntentServiceは主に、作業をアクティビティから切り離して続行する場合に使用します (たとえば、ユーザーが別の作業を行うために UI を離れてもファイルのダウンロードを続行する必要がある場合など)。

于 2012-07-30T19:10:35.633 に答える
2

と で双方向通信を行おうとしているように思えActivityますService。をサービスに送信する代わりに、それにバインドIntentすることを検討してください。

編集: CommonsWare のコメントへの応答:

へのバインディングの問題はどこにありIntentServiceますか? bound を含む、問題なく動作するアプリを出荷しましたIntentService。あなたは自分の主張を裏付ける証拠を提供していません。

ここから:

サービスは、開始することも、接続をバインドすることもできます。Context.BIND_AUTO_CREATEこのような場合、システムは、サービスが開始されているか、フラグを使用して 1 つ以上の接続が存在する限り、サービスを実行し続けます。これらの状況がいずれも成立しない場合、サービスのonDestroy()メソッドが呼び出され、サービスは事実上終了します。から戻った時点で、すべてのクリーンアップ (スレッドの停止、レシーバーの登録解除) を完了する必要がありますonDestroy()

ドキュメントは、システムが同時バインディングと開始をサポートしていることを明確に示しています。IntentServiceを定期的に使用しても、Serviceこれは変わりません。を処理した後にサービスを明示的に停止してもIntent、何かがまだバインドされている限り、Android はそのサービスを実行したままにします。

また、OPが何をしようとしているのかによっては、IntentService不要になる場合があります。

于 2012-07-30T19:10:23.200 に答える