次のメソッドを使用して、アクティビティが表示されているかどうかを他のアクティビティまたはサービスから判断することについて、他の意見を聞きたいと思いました: メソッドは static booleans をフラグとして使用することであり、その値はアクティビティのライフサイクルに依存します。私はすでにこのソリューションを実装しており、問題なく動作しているようです。ただし、これが信頼できる解決策であるかどうかは疑問です。私が理解していることから、アクティビティのライフサイクルはその Activity クラスのインスタンス内に含まれていますが、静的メソッドまたはフィールドはすべてのインスタンスに適用されます。アクティビティについては、その可視性ステータスを決定する必要があります。私はsingleTask起動モードを使用したので、複数のインスタンスが存在することはありません。それを念頭に置いて、静的ブール値が私のアクティビティの実際のステータスを 100% 表すと仮定しても安全でしょうか?
2 に答える
Well, for sure you can use static boolean flags. However, if you have more options then true/false, I recommend to use enum instead.
If your Application has more then 2 Activities, using booleans only leads to hard maintenance.
So for clear code use enum flags like:
public enum EActivityState{
  UNKNOWN,
  VISIBLE,
  NOT_VISIBLE,
  LAUNCHED,
  // ....
}
After you can use:
private EActivityState mActivityState = EActivityState.UNKNOWN;
....
if(EActivityState.LAUNCHED == mActivityState ){
  // do something
}
What you said is correct:
static methods or fields applies to all instances
Check out the Activity Lifecycle here: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
and make sure you set your flag correctly, then your solution should be just fine.