1

多くのアクティビティを備えた Android アプリケーションを開発しています。私の MainActivity (開始アクティビティ) には、サーバーから更新されたデータを取得するためのコードがあります。ユーザーがアプリケーションを起動するたびに、サーバーから更新されたデータを取得したい (最初の起動またはフォアグラウンドでのアプリケーションの移動)。最初の起動は問題ありません。データをフェッチします。しかし、ユーザーが他のアクティビティを行っていて、アプリを最小化して再度開くと、最後の状態から開始されます。この時点で、データを再度フェッチできるように、アプリケーションが再起動していることをどのように検出できますか。

すでに onResume()、onPause() メソッドを確認しましたが、これらは個々のアクティビティに属しています。iOS アプリケーションで通常行うように、アプリケーション レベルでイベントをキャッチしたいと考えています。

4

3 に答える 3

1

知る限り、できません。アプリケーションがバックグラウンドになったことを確認するには、すべてのアクティビティから onResume()/onPause() をフィルタリングする方法を見つける必要があります。

提案:

 public abstract class AbstractActivity extends Activity{
    private static long pauseTime=0;
    private static final long MIN_PAUSE_TIME = 3000;

    protected void onPause(){
      super.onPause();
      pauseTime = System.currentTimeMillis();
    }

    protected void onResume(){
      super.onResume();
      if(System.currentTimeMillis()-pauseTime > MIN_PAUSE_TIME){
         // do server stuff
      }
    }
 }

次に、すべてのアクティビティをこれに拡張します。

于 2013-01-09T09:26:37.103 に答える
0

開始するのに最適な場所は、アクティビティライフサイクルに関するドキュメントを読むことです:http://developer.android.com/training/basics/activity-lifecycle/starting.html

私の最初の考えは、コードを実行するのではなくonCreate()(これはあなたがやっていると思います)、コードを配置することですonStart()(しかしonResume()適切かもしれません)-ドキュメントを読んで、どれが明らかになるはずですアプリケーションに使用するのが最適です

于 2013-01-09T09:24:35.943 に答える
-1

アプリケーションに拡張するクラスを 1 つ作成し、onPause() と onResume() を実装します。すなわち、次のように..

 /**
* Top-level Application class for the your app.
 */
public class DummyApp extends Application {
    /* package */ static final String LOG_TAG = "DummyApp";
  onPause(){
  super.onPause();
  //do whatever you want--
  }

  onResume(){
  super.onResume();
   //Do whatever you want --
  }
  }

次に、このアプリ名「DummyApp」を AndroidManifest.xml に次のように記述します。

<application android:name="DummyApp"
             android:label="@string/apLabel"
             android:icon="@drawable/ic_launcher">

これで解決することもあると思います...

于 2013-01-09T09:57:57.157 に答える