Как проверить, является ли моя активность текущей активностью, запущенной на экране - PullRequest
23 голосов
/ 16 июля 2010

Я использовал Toast для создания уведомлений, но, похоже, оно появится, даже если его активность не отображается на текущем экране, а некоторые другие действия были запущены.

Я хочу проверить эту ситуацию, когда действиене текущий, я бы не отправлял уведомление о тосте.Но как это сделать?

Ответы [ 7 ]

83 голосов
/ 16 июля 2010

Когда ваша активность выходит на передний план, вызывается ее метод onResume().Когда другое действие появляется перед вашим действием, будет вызван его метод onPause().Поэтому все, что вам нужно сделать, это реализовать логическое значение, указывающее, находится ли ваша активность на переднем плане:

private boolean isInFront;

@Override
public void onResume() {
    super.onResume();
    isInFront = true;
}

@Override
public void onPause() {
    super.onPause();
    isInFront = false;
}
7 голосов
/ 22 января 2012
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(); 
}

Таким образом вы узнаете, является ли указанная активность текущей видимой активностью.

2 голосов
/ 10 июля 2016

Я предпочитаю не обрабатывать состояние самостоятельно, поэтому я реализовал класс, который делает это для меня.

package mypackage;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

// Mine extends AppCompatActivity - your's might need to extend Activity, depending on whether
// you use the support library or not.
public class StateTrackingActivity extends 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().

2 голосов
/ 09 июля 2014

Это моя окончательная функция isActivityVisible.

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;
}
1 голос
/ 02 ноября 2016
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

1 голос
/ 08 июня 2011

Существует Activity # isTaskRoot () method

0 голосов
/ 09 марта 2017
  if ( getActivity() instanceof ManageCardActivity){

   // your code
  }
...