2

こんにちは、あなたの助けに感謝します。

私は次のような状況にあります。

私のアクティビティは、AsyncTaskを介してインターネットから大量のデータを取得するサービスにバインドされています。

サービスは重いので、ユーザーがアクティビティのために移動するときにサービスが停止していることを確認する必要があります。したがって、でサービスを停止するようにしonDestroy()ます。

構成の変更onDestroy()が呼び出されると、およびが呼び出されonPause()onStop()その後、サービスはによって停止されonDestroy()ます。

重要なのは、構成の変更時にサービスを停止させたくないということです。

どんな提案でも大歓迎です!

そして、あなたの助けに感謝します!

4

3 に答える 3

3

APIレベル11以上でisChangingConfigurations()呼び出すことができます。onDestroy()この投稿「アクティビティが構成を変更しているかどうかを区別する方法」を参照できます。

多分あなたは別のアプローチを取るべきです。IntentService(バックグラウンドで実行され、もう必要ありませんAsyncTask)を使用し、そのサービスを使用してデータを取得および保存してから、多分Activitiesを使用してデータが更新されたことを通知する必要があると思います。Broadcast

于 2013-01-20T13:16:03.513 に答える
0

私はあなたの問題について2つのことを提案することができます。

1)マニフェストファイルのアクティビティ(はいアクティビティではなくサービス)宣言で以下のタグを使用します。これにより、基本的に方向変更時のアクティビティの再作成が回避されます。したがって、onDestroyは呼び出されません。

android:configChanges="keyboardHidden|orientation"

2)アクティビティの以下のメソッドでサービスを強制終了/停止できます。これは、ユーザーがアクティビティから離れたい場合にのみ呼び出されます。また、別の活動を開始するときはいつでもサービスを停止する必要があります。

 @Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
}
于 2013-01-20T13:14:27.633 に答える
0

これで試してください:

<service android:name=".yourService"
       android:configChanges="keyboardHidden|orientation"></service>

この属性をmanifestファイルに適用します。

簡単な説明:

デフォルトでは、Androidで特定の主要な構成変更が発生すると(一般的な例は向きの変更です)、Androidは実行中のアクティビティ/サービスを完全に再起動して、そのような変更に適応できるようにします。

で定義するandroid:configChanges="keyboardHidden|orientation"と、AndroidManifestAndroidに次のように伝えます。「キーボードを抜いたり、電話を回転させたりするときに、デフォルトのリセットを行わないでください。これを自分で処理したいと思います。はい、私が何をしているのかわかります。」 。

于 2013-01-20T12:58:45.240 に答える