如何检查我的活动是否是在屏幕上运行的当前活动

我用吐司做通知,但似乎它会出现,即使它的活动不在当前的屏幕上,一些其他活动已经开始。

我想检查这种情况,当活动不是当前的,我不会发送Toast通知。 但是怎么办?

Related of "如何检查我的活动是否是在屏幕上运行的当前活动"

当你的Activity到达前台时,它的onResume()方法将被调用。 当另一个Activity出现在你的Activity之前时,它的onPause()方法将被调用。 所以你所要做的就是实现一个布尔值来指示你的Activity是否在前台:

 private boolean isInFront; @Override public void onResume() { super.onResume(); isInFront = true; } @Override public void onPause() { super.onPause(); isInFront = false; } 
 ArrayList<String> runningactivities = new ArrayList<String>(); ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE); List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); for (int i1 = 0; i1 < services.size(); i1++) { runningactivities.add(0,services.get(i1).topActivity.toString()); } if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){ Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show(); } 

这样你就会知道指出的活动是否是当前可见的活动。

这是我的终极isActivityVisiblefunction。

 protected boolean isActivityVisible() { if (this.mActivity != null) { Class klass = this.mActivity.getClass(); while (klass != null) { try { Field field = klass.getDeclaredField("mResumed"); field.setAccessible(true); Object obj = field.get(this.mActivity); return (Boolean)obj; } catch (NoSuchFieldException exception1) { // Log.e(TAG, exception1.toString()); } catch (IllegalAccessException exception2) { // Log.e(TAG, exception2.toString()); } klass = klass.getSuperclass(); } } return false; } 

我不喜欢自己处理国家,所以我已经实施了一个这样的课程。

 package mypackage; 

package mypackage;

导入android.os.Bundle;
导入android.support.v7.app.AppCompatActivity;

//我的扩展AppCompatActivity – 您的可能需要扩展Activity ,取决于是否
//您是否使用支持库。
公共类StateTrackingActivity扩展AppCompatActivity {

 public enum ActivityState { CREATED, RESUMED, STARTED, PAUSED, STOPPED, DESTROYED } private ActivityState _activityState; protected ActivityState getActivityState() { return _activityState; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); _activityState = ActivityState.CREATED; } @Override protected void onResume() { super.onResume(); _activityState = ActivityState.RESUMED; } @Override protected void onStart() { super.onStart(); _activityState = ActivityState.STARTED; } @Override protected void onPause() { super.onPause(); _activityState = ActivityState.PAUSED; } @Override protected void onStop() { super.onStop(); _activityState = ActivityState.STOPPED; } @Override protected void onDestroy() { super.onDestroy(); _activityState = ActivityState.DESTROYED; } 

}

然后你的活动可以扩展这个,你可以通过调用getActivityState()来获得状态。

 if (BaseActivity.this instanceof Faq) { Toast.makeText(BaseActivity.this, "You are in the Same Page", Toast.LENGTH_SHORT).show(); }else { Intent intent = new Intent(BaseActivity.this, Faq.class); startActivity(intent); drawer.closeDrawer(GravityCompat.START); } 

////这里我所有的活动都在扩展名为BaseActivity的Activity

有Activity#isTaskRoot()方法

  if ( getActivity() instanceof ManageCardActivity){ // your code }