vir*_*sir 23 lifecycle android screen android-activity
我使用Toast进行通知,但似乎即使它的活动不在当前屏幕中也会出现,并且其他一些活动已经启动.
我想检查这种情况,当活动不是当前活动时,我不会发送Toast通知.但怎么办?
And*_*ang 83
当您的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;
}
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
这样,您将知道指向的活动是否是当前可见活动.
我不喜欢自己处理状态,所以我实现了一个为我做这件事的类。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的 Activity 可以扩展这个,你可以通过调用getActivityState().
| 归档时间: |
|
| 查看次数: |
47312 次 |
| 最近记录: |