2016-06-24 11 views
1

私は複数のアクティビティでAndroidアプリを作成しています。アプリが「再開」されたときにサーバーにチェックインする必要があります(新鮮なスタート、ロックされた画面や別のアプリからの切り替えなど)。言い換えれば、同じものはすべてのアクティビティのonResume()に入る必要があります。Android:アプリが再開されたときに何かする

チェックインに失敗した場合、AsyncTaskを起動し、ユーザー名/パスワードなどの入力を要求します。

私は、各アクティビティ(つまり、チェックインコードはすべてのアクティビティで複製されます)でonResume()メソッドを同一に保つことで作業しています。確かにこれを行うためのより良い方法があります。それは何ですか?

答えて

1

ご使用のケースによって異なります。すべてのアクティビティで同じ機能が必要な場合は、基本アクティビティを作成できます。すべての活動がそれを拡張します。このロジックをベースアクティビティのonResume()に移動すると、すべてのアクティビティにこのロジックが適用されます。

この方法でも問題が解決しない場合は、このロジックを別のコントローラクラスに移動して、それを必要とするすべてのアクティビティで使用できます。これはもう少し柔軟性があり、コードの重複を避けるのに役立ちます。

+0

とてもシンプルです!!申し訳ありませんが、私はupvoteに十分な評判を持っていません。 –

+0

これは素晴らしいことです:)私たちがあなたの質問に答えたと思うなら、あなたが最高だと思う答えを受け入れてください。ありがとうございました。 –

+0

@RamanKrishnan upvoteは必要ありません。答えを受け入れるのです。 –

1

あなたは例えば、ベースアクティビティを作成することができます

public abstract class BaseActivity extends AppCompatActivity { 

@Override 
protected void onResume() { 
    super.onResume(); 
    /* your code here*/ 
} 

} 

あなたのすべての活動は次のようにBaseActivityから継承する必要があります:あなたはBaseActivityを定義することができonResume()すべてのあなたの活動をチェックインする必要がある場合は

public class MainActivity extends BaseActivity { 
/* your code */ 
} 
0

これからすべてのあなたの活動を広げ、あなたの基本活動のonResumeにあなたのものをすることができます。

public abstract class BaseActivity extends AppCompatActivity { 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // do your stuff here 
    } 
} 

しかし、あなたのアプリだけを再開するときにあなたのものをする必要がある場合は、少し複雑になるかもしれません。あなたのアプリが再開したときに呼び出される直接的なメソッドはありません。

だからあなたは、以下のようなあなたのApplicationクラスでカスタムコンポーネントのコールバックを作成することができます。

public class CustomComponentCallback implements ComponentCallbacks2 { 

     @Override 
     public void onTrimMemory(int level) { 
     if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { 
      isAppWillResume = true; 
     } 
     } 

     @Override 
     public void onConfigurationChanged(Configuration newConfig) { 

     } 

     @Override 
     public void onLowMemory() { 

     } 
    } 

を、以下のようなカスタムアクティビティのライフサイクルコールバックを作成します。

private static final class CustomLifecycleCallbacks implements ActivityLifecycleCallbacks { 
    @Override 
    public void onActivityResumed(Activity activity) { 
     if(isAppWillResume){ 
      // do your staff 
      isAppWillResume = false; 
     } 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 

    } 
    //... 
} 

は、静的ブールフィールドを定義します。あなたのアプリケーションクラスは以下のようになります:あなたのコールバックを登録します。

private static boolean isAppWillResume = true; 

、アプリケーションの onCreateに登録カスタムコールバックは:

registerComponentCallbacks(new CustomComponentCallback()); 
registerActivityLifecycleCallbacks(new CustomLifeCycleCallbacks()); 

私はこのアプリが再開されたかどうかを検出するために最善の方法だかはわからないが、このソリューションは、私のために動作します。

編集:BaseActivityですべてのアクティビティを拡張したくない場合は、私が書いたカスタムコールバックだけを登録でき、onResumeでは必要な作業を行うことができます。 あなたの活動のいずれかが再開されたときに呼び出されます。

Good Luck!

関連する問題