2016-08-20 10 views
0

私は3つのアクティビティを持つアプリを持っており、ユーザーはこれら3つのアクティビティの間で常にタブ移動します。ユーザーがアプリケーションを閉じる直前に、私のコードはインターネットから現在時刻をダウンロードして保存します。問題は、onPause()メソッドで時間をダウンロードするコードがあることです。これにより、ユーザーがアクティビティを切り替えるたびにデータが繰り返しダウンロードされます。私はonDestroy()を使ってみましたが、ダウンロードは決して開始しませんでした。ユーザーがアクティビティスイッチで呼び出されたものではなく、アプリケーションを最小化または閉じるときに呼び出されるメソッドはありますか? どうもありがとうございました。onPause以外の方法?

+1

活動が –

+1

onStopがonStop dosent仕事 –

+0

と呼ばれることが保証されていないと私は直接返信する方法を知らないが、ユーザーが5秒以内にアプリを最小化し、閉じた場合何が起こるか試してみてください?タスクは実行されませんか? –

答えて

0

これはApplicationクラスを使用して達成できます。そこに私たちのアプリがバックグラウンドに行くときを識別するためにActivityLifecycleCallbacksを実装することができ、その結果に基づいて我々は必要な作業を実行することができます。ここで、サンプルコード:上記のコードで

public class MyApplication extends Application implements ActivityLifecycleCallbacks { 

    private Handler mHandler; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     mHandler = new Handler(); 
    } 

    ... 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.i("Activity Resumed", activity.getLocalClassName()); 

     // cancel scheduled download operation (if any) 
     mHandler.cancelCallbacksAndMessages(null); 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     Log.i("Activity Paused", activity.getLocalClassName()); 

     // schedule a download operation after 5 seconds 
     mHandler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
        performDownloadOperation() 
      } 
     }, 5000); 
    } 

    ... // other lifecycle callbacks 

    private void performDownloadOperation() { 
     // perform download operation here 
    } 

} 

、我々は基本的にユーザー【及びシステム]別のアクティビティから切り替える5秒間の猶予時間を与えています。さもなければ、我々は、アプリがバックグラウンドに行って、そこに私たちのものを行うことに注意します。ユーザーが4秒間別のアプリに切り替えてから戻ってきても、データはまだダウンロードされません。ほとんどの場合、これで問題はありません。

上記のクラスを使用するには、マニフェストファイルの<application>タグの下にプロパティのクラスリファレンスをandroid:name=".MyApplication"として指定する必要があります。

+0

切り替えられたとき、それが呼び出されるためonStop –

+0

閉じるとはどういう意味ですか?強制的に止める? – Shaishav

+0

ユーザーが四角形を押して最近のアプリの引き出しを開くと(アプリを最小限にする)、アプリをスワイプして閉じる(閉じる)と、 –

0

Activity::isFinishing()を利用できます。これは、(1)別のアクティビティを起動するとき、または(2)アプリがバックグラウンドに置かれたときにfalseを返しますが、(3)バックボタンが押されたとき、または(4)誰かがアクティビティでfinish

(1)と(2)を区別することが重要な場合は、アクティビティを起動してリセットするたびにフラグを保持し、にリセットすることができます。

関連する問題