我有一个活动A,B,C,D,E的应用程序。活动A从发射器开始,B从A开始,C从B开始,D从C开始,E从D开始,如A - >。 B - > C - > D - > E. 现在在活动E,我想做:
for(int i = 0; i< listActivity; i ++) if(活动[i]合格) 展示活动。
如何浏览正在运行的列表活动以及如何从堆栈到前端获取任何活动? 希望你理解我并支持我这个问题。 谢谢大家都读过。
答案 0 :(得分:0)
A,B,C,d,E。活动扩展了BaseActivity
public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppManager.getAppManager().addActivity(this);
}
}
然后你可以使用AppManager.getAppManager().XXXX
做什么。下一个?
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager() {
}
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* AddmActivity to stack
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* Get current Activity(stack Top Activity)
*/
public Activity currentActivity() {
if (activityStack == null || activityStack.isEmpty()) {
return null;
}
Activity activity = activityStack.lastElement();
return activity;
}
public Activity findActivity(Class<?> cls) {
Activity activity = null;
for (Activity aty : activityStack) {
if (aty.getClass().equals(cls)) {
activity = aty;
break;
}
}
return activity;
}
/**
* Finish Activity(Stack Top Activity)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* Finish someone Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
if (activityStack.contains(activity)) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
}
/**
* Finish someone Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* Finish All Activity except cls,if cls not in stack ,then clear all
* @param cls
*/
public void finishOthersActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (!(activity.getClass().equals(cls))) {
finishActivity(activity);
}
}
}
/**
* Finish All Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
if (activityStack.contains(activityStack.get(i))) {
activityStack.get(i).finish();
}
}
}
activityStack.clear();
}
/**
* exit
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(context.getPackageName());
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
} catch (Exception e) {
System.exit(0);
}
}
}
答案 1 :(得分:0)
创建Base Activity
以保留应用中的所有started Activity
。所有其他Activity
都需要延伸到Base Activity
启动Activity
后,将其添加到HashMap
或ArrayList
。我希望在我的Application
类
public class MyApp extends Application {
public static HashMap<String , CommonActivity > mBackStackActivities
= new HashMap<String, CommonActivity>();
}
现在,创建Base Activity
并将Activity
实例放入HashMap
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common);
MyApp.mBackStackActivities.put(getComponentName().getClassName(), this);
}
Activity
在HashMap
被销毁时删除
@Override
protected void onDestroy(){
MyApp.mBackStackActivities.remove(getComponentName().getClassName());
super.onDestroy();
}
最后,当需要从列表中检索Activity
时,您还可以检查Activity
是否已经启动
if(MyApp.mBackStackActivities
.containsKey(intent.getComponent().getClassName())){
答案 2 :(得分:0)
非常感谢你的答案,@ Libin和@ Gavin2058,我创建了一个类似于你的类,我将活动保存到List,当我想在List中获取活动时,我检查:
public static boolean checkActivityExist(Class<?> activity) {
int size = ActivityHistory.size();
for (int i = size - 1; i >= 0; i--) {
Activity ac = ActivityHistory.get(i);
if (activity.isAssignableFrom(ac.getClass())) {
return true;
}
}
return false;
}
如果条件为真,我会得到活动并启动它:
public static void startActiByStateTab(AbstractActivity c, STATESTAB state) {
int size = ActivityHistory.size();
for (int i = size - 1; i >= 0; i--) {
AbstractActivity ac = (AbstractActivity)ActivityHistory.get(i);
if (ac.getIsTab() == state) {
Intent intent = new Intent(c, ac.getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
c.startActivity(intent);
break;
}
}
}
但是我调试并看到我刚开始的活动,它来到onResume但是在屏幕上是透明的,没有它在屏幕上显示的视图。 我想......