Как проверить, является ли моя активность текущей активностью, запущенной на экране

Немного поздно, но вот очень легкое решение для удаленной отладки, любезно предоставленное http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible :

  1. pip install epdb на удаленном хосте.
  2. Убедитесь, что ваша настройка брандмауэра не позволяет нелокальные подключения к порту 8080 на удаленном хосте, поскольку epdb по умолчанию для прослушивания на любом адресе (INADDR_ANY), а не 127.0.0.1.
  3. Вместо использования import pdb; pdb.set_trace() в вашей программе используйте import epdb; epdb.serve().
  4. Надежно войдите в систему удаленный хост, так как epdb.connect() использует telnet.
  5. Прикрепите к программе с помощью python -c 'import epdb; epdb.connect()'.

Отрегулируйте биты безопасности в соответствии с настройками вашей локальной сети и безопасностью , конечно.

23
задан virsir 16 July 2010 в 05:27
поделиться

6 ответов

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

private boolean isInFront;

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

@Override
public void onPause() {
    super.onPause();
    isInFront = false;
}
83
ответ дан NRR 16 July 2010 в 05:27
поделиться

Это моя последняя функция 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;
}
2
ответ дан Melug 16 July 2010 в 05:27
поделиться

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

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
ответ дан Minas Mina 16 July 2010 в 05:27
поделиться

Существует метод Activity # isTaskRoot ()

1
ответ дан Andrey 16 July 2010 в 05:27
поделиться
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);
            }

//// Здесь я. Все мои действия распространяются на Activity под названием BaseActivity

1
ответ дан J. Chomel 16 July 2010 в 05:27
поделиться
  if ( getActivity() instanceof ManageCardActivity){

   // your code
  }
-3
ответ дан JiTHiN 16 July 2010 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: