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

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

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

  • Android - 切换到活动而不重新启动它
  • 使Android Activity看起来像对话框
  • Android:如何获得安装的活动列表,因为它们在启动器中显示,没有重复
  • android如何完成其​​他活动的活动
  • onCreate,onCreateOptionsMenu,onResume,执行的顺序是什么?
  • 如何知道android中的调用活动
  • 如何从Activity.startActivity(意图)select器中排除我自己的活动?
  • Android活动转换animation
  • 当你的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 }