使用堆栈管理activity,第二次启动时进入程序黑屏?

HuaLikeDotNet 2011-01-19 10:48:36
程序有个完全退出的功能,据说使用堆栈管理activity,在退出时候能完全的退出。
这个是activity管理类

/**
* 使用单例模式 将activit存放到堆栈里进行管理
*/
public class ScreenManager {
private static Stack<Activity> activityStack;
private static ScreenManager instance;
private ScreenManager(){}
public static ScreenManager getScreenManager(){
if(instance==null){
instance=new ScreenManager();
}
return instance;
}
/**
* 存放activity到堆中
* @param activity
*/
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 从堆栈中取activity 并关闭
*/
public void popActivity(){
Activity activity=activityStack.lastElement();
if(activity!=null){
activity.finish();
activity=null;
}
}
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
/**
* 从堆栈中取最后一个activity
* @return
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 移除全部并且关闭activity
*/
public void popAllActivit(){
while(true){
if(!activityStack.empty())
{
//Activity activity = activityStack.pop();
Activity activity=currentActivity();
if(activity==null){
break;
}
popActivity(activity);
}
}
}
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls) ){
break;
}
popActivity(activity);
}
}

}

在activity跳转时候进行压入堆栈

//添加到堆栈
ScreenManager screenManger=ScreenManager.getScreenManager();
screenManger.pushActivity(TestExitB.this);
Intent intent = new Intent();
intent.setClass(TestExitB.this,TestExitC.class);
startActivity(intent);
...全文
582 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinjay 2011-01-19
  • 打赏
  • 举报
回复
这和直接调用this.finish有什么区别?
只不过自己做个管理罢了

final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

uses-permission
<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>
试试,这样可以完全关闭应用。
文斌 2011-01-19
  • 打赏
  • 举报
回复
Activity有自己的生命周期管理,也有ActivityManager,为何要自己来管理?

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧