0

私のアプリケーションには、メイン メニュー、サブ メニュー、詳細の 3 つのアクティビティがあります。アプリケーションが再開するたびに、いくつかのファイルのダウンロードを開始できるように、何らかの情報を取得したいと考えています。

今私がやっていることは、各アクティビティonResumeで、ダウンロードがすでに行われているかどうかを確認することです。そうでない場合は、ダウンロードを開始します。このようにして、次/前のアクティビティを開始するたびに、ダウンロードが行われていない場合はダウンロードを開始します。つまり、ダウンロードが完了すると、ユーザーは次のページに移動し、ダウンロードが再開されます。

この動作を防ぎたいと思います。そうしないと、不要なインターネット使用が発生します。

ダウンロード状態を追跡するグローバル (アプリケーション レベル) 変数を維持すると、アプリケーションを再開した後でも、値が再設定されません。

onResumeアプリケーションの取得方法に関する提案。

4

3 に答える 3

2

ダウンロード プロセスを開始する前に、ダウンロードしたコンテンツを確認してみてはどうでしょうか。これを行うには複数の方法がありますが、ダウンロードするコンテンツの性質についてはあまり詳しく説明していません。

例: FS でダウンロードされたファイルを確認し、コンテンツが既にダウンロードされているかどうかを示す永続的なフラグをどこかに (SharedPreferences、SQLite db などを使用して) 設定します。

于 2012-11-09T09:39:27.280 に答える
1

できません。アプリケーションは再開されません。アプリケーションは作成と破棄のみを行います。アクティビティには複雑なライフサイクルがあります。

私にとって最良のアプローチは、各アクティビティが onResume にバインドされ、サービスがダウンロードを処理するサービスのようです。

于 2012-11-09T09:38:23.280 に答える
1

SharedPreferences を使用して、次のようなデータを保存できます。

ダウンロードが完了すると:

  SharedPreferences settings = getSharedPreferences(MY_PREF, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putBoolean("download_done", true);

ダウンロードが別のアクティビティから行われたかどうかを確認する場合:

   SharedPreferences settings = getSharedPreferences(MY_PREF, 0);
   boolean downloadDone = settings.getBoolean("download_done", false);
   if (!downloadDone) {
   // Code to start/resume download.
   }

これは、任意のアクティビティ、サービスなどから使用できます。詳細については、こちらを参照してください

于 2012-11-09T09:40:04.843 に答える