Немного поздно, но вот очень легкое решение для удаленной отладки, любезно предоставленное http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible :
pip install epdb
на удаленном хосте. epdb
по умолчанию для прослушивания на любом адресе (INADDR_ANY
), а не 127.0.0.1. import pdb; pdb.set_trace()
в вашей программе используйте import epdb; epdb.serve()
. epdb.connect()
использует telnet. python -c 'import epdb; epdb.connect()'
. Отрегулируйте биты безопасности в соответствии с настройками вашей локальной сети и безопасностью , конечно.
Когда ваша активность выйдет на передний план, будет вызван ее метод onResume()
. Когда другая активность появляется перед вашей активностью, вызывается метод onPause()
. Поэтому все, что вам нужно сделать, это реализовать логическое значение, указывающее, находится ли ваша активность на переднем плане:
private boolean isInFront;
@Override
public void onResume() {
super.onResume();
isInFront = true;
}
@Override
public void onPause() {
super.onPause();
isInFront = false;
}
Это моя последняя функция 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;
}
Я предпочитаю не обрабатывать состояние самостоятельно, поэтому я реализовал класс, который делает это для меня.
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()
.
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
if ( getActivity() instanceof ManageCardActivity){
// your code
}