androidactivity退出
㈠ android 面试4: 如何退出Activity如何安全退出已调用多个Activity的Application
当然,也可以用killProcess()和System.exit()这样的方法。 现提供几个方法,供参考: 1、抛异常强制退出: 该方法通过抛异常,使程序Force Close。 验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。 2、记录打开的Activity: 每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。 3、发送特定广播: 在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。 4、递归退出 在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。 除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。 但是这样做同样不完美。 你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。 但至少,我们的目的达到了,而且没有影响用户使用。
㈡ Android Activity退出为啥要按两次返回键呢
这个是你的程序里面AndroidMainfest.xml里面A对应的Activity的配置的属性决定的。你可能没有配置A这个Activity的launchMode这个属性,或者你配置的是默认属性值standard。你修改这个属性为singletop或者singletask试试。
网络一下launchMode,仔细看下你就明白了。
㈢ Android开发怎样彻底退出APP我有两个activity,在第一个activity中用system.exit(0)可以
你在第一个activity里用exit退出,只是结束了当前页面而已,当你在第一个页面exit因为只有一个页面,所以可以,当有两个以上页面是,结束了第二个页面就会跳到第一个页面去,不能彻底退出。解决办法:在配置文件里把最后你要退出的那个页面的launchMode设置为singleTask,例如你上面说的第二个activity,你要退出的时候,直接在第二个activity里finish()就可以了。
㈣ android 从一个activity跳转到另一个activity后在跳转回来,为什么就退出不了程序
activity是栈的方式存储的,当你跳到第二个activity时,第一个被push到栈中,第二个activity中的back事件没有处理的话,默认是pop第一个栈,也就是返回第一个activity。这个时候,你再back才是执行第一个activity中的你定义的back事件——退出。
㈤ Android 应用退出的几种方法
android退出运用,主要有3种常用方案。
分别是:
杀进程,暴力退出app。
系统退出,强制性退出。
activity管理(栈),合理性退出。
【主要原理】
主要是通过通知系统杀死运用,或者移除所有的界面资源达到退出运用的目的。
【详细实现】
杀进程,暴力退出app。
优缺点:暴力,但是容易丢失数据,可能会引起不必要的问题。
代码如下:
android.os.Process.killProcess(android.os.Process.myPid());
系统退出,强制性退出。
优缺点:相对第一种方法温和点,谨慎使用。
代码如下:
System.exit(0);
activity管理(栈),合理性退出。
优缺点:推荐使用,一个个移除apk打开的所有资源,达到退出apk的目的。
代码如下:
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
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//获得当前栈顶Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//将当前Activity推入栈中
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
//退出栈中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls) ){
break;
}
popActivity(activity);
}
}
}
【最后】
推荐使用第三种方案,方便管理退出。
㈥ android 中怎样能够清除activity堆栈,也就是退出整个应用
如果退出整个程序,如下操作:方式一:Intent intent=new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);this.startActivity(intent);System.exit(0); 方式二:android.os.Process.killProcess(android.os.Process.myPid()); android 完全退出程序有几个activity,有一需求是在一个activityA点击back键退出系统而不是跳到之前的activity首先想到的是清空activityA的堆栈,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但是该activityA不是已经存在于堆栈底端的,所以清除的只是堆栈中该activityA上面的activity,但后退后还是会返回堆栈中该activityA下面的activity。
㈦ Android Activity的关闭问题
你说的闪屏的activity是启动的广告页?首先要保证你按返回就退出的app是在栈的底部,这样在这个页面调finish();就会直接完全的退出app,可以通过activity的启动模式来控制,这个你查一下就会很清楚的,我这里简单说一下:
1.在清单文件中,<Activity>标签中加入android:launchMode = ""这个属性,控制启动模式,或者java文件中也可以,不过不太一样。
standard: 默认模式 可以实例化多次,每次都会创建一个新的实例
singleTop:可以实例化多次,但是栈顶只能出现一个
singleTask:只能创建一个Activity的实例
singleInstance:当启动这种模式的Activity时,系统会分配一个新的任务task,并把Activity的实例放到栈的底部,他不允许其他的实例和它共享一个栈
2.在Activity中通过Intent对象来设置,优先级高于xml文件中的设置:
FLAG_ACTIVITY_SINGLE_TOP 等同于 singleTop
FLAG_ACTIVITY_CLEAR_TOP 同singleTask 相似,当栈中存在要启动的Activity实例,首先会把在它之上的实例移除,并且销毁,然后销毁当前的Activity实例,重写创建新的实例
FLAG_ACTIVITY_NEW_TASK
必须在<Activity>添加属性android:taskAffinity="com.other" 包名 android:alwaysRetainTaskState="true"只有设置了这两个属性,系统才会为当前实例创建新的任务,并放到栈的底部
㈧ Android 怎么退出整个应用程式
Android 怎么退出整个应用程式
在Android中,Activity有个栈,一个Activity结信谈束掉,会回到上一个Activity,并不是退出应用程式。
Android中,退出应用程式的方式:
通过pid
int pid = android.os.Process.myPid(); 获取当前应用程式的PID
android.os.Process.killProcess(pid); 杀死当前程序
这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。
2.通过ActivityManager
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); 获取应用程式管理器
manager.killBackgroundProcesses(getPackageName()); 强制结束当前应用程式
这种方式退出应用,会结束本应用程式的一切活动,因为本方法会根据应用程式的包名杀死所有程序包括Activity,Service,Notifications等。
呼叫System.exit(0);
其实还有一种方法也不错,把MainActivity设定为singleTop,先跳转到MainActivity然后finish就行,不过要注意停掉相应的Service
大家都知道 Android 的 Activity 是存着历史栈的,比如从 A -> B -> C,C 完成 finish 后喊森回到 B,把所有的Activity 都 finish了,程式就自然退出了。 当然在 finish 的同时也需要是否自己程式的其他资源。所以需要想个办法把 Activity 给存起来。然后在程式退出的地方呼叫它们的 finish()郑坦亩方法。
使用全域性变数。对了,第一个想到的就是继承 Application,程式码入下。
public class AgentApplication extends Application { private List<Activity> activities = new ArrayList<Activity>(); public void addActivity(Activity activity) {activities.add(activity);} @Overridepublic void onTerminate() {super.onTerminate();for (Activity activity : activities) {activity.finish();}onDestroy();System.exit(0);}}
然后在 Activity onCreate 的时候来呼叫 addActivity (),有人可能想到这个Application需要在所有的 Activity onCreate的时候都使用,需要做一个单例例项。其实根本不需要。在 Activity 中使用 this.getApplication() 就可以了。
最后在你需要推出程式的地方呼叫 application.onTerminate() 就可以了。记住:super.onTerminate() 必须呼叫,程式码中的 onDestroy()是我自己的释放其他资源的方法,不是系统的。
执行以上程式码后,在LogCat 中会出现一行提示:
Process 包名 (pid xxxxx) has died. 证明你的程式退出了。现在你可以测试了。
有几种方法,一种是:程式退出时,下方有写 在按一次退出程式
第二种,进 设定-应用程式-正在执行 这一栏自己关
有时跳转的activity较多时,还需要多次按返回键,这样感觉一点都不爽。 后面添加了一个选单返回功能键,这个方法也只能用system.exit(0)来关闭当前活动的Activity,附程式码: public boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu); MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit"); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){public boolean onMenuItemClick(MenuItem item){System.exit(0); return true;}});return true;}想到这样太不方便了,每次退出接口之后应用程式还在执行,今天查了下资料终于把这个问题给解决了, 网上提供了几种方法,我吸收了下面这个自认为简单易懂的方法,将下面SysApplication这个类复制到工程里面,然后在每个Acitivity的oncreate方法里面通过SysApplication.getInstance().addActivity(this);添加当前Acitivity到ancivitylist里面去,最后在想退出的时候呼叫SysApplication.getInstance().exit();可直接关闭所有的Acitivity并退出应用程式。 附程式码:import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.content.DialogInterface; import android.content.Intent; public class SysApplication extends Application { private List mList = new LinkedList(); private static SysApplication instance; private SysApplication() { } public synchronized static SysApplication getInstance() { if (null == instance) { instance = new SysApplication(); } return instance; } add Activity public void addActivity(Activity activity) { mList.add(activity); } public void exit() { try { for (Activity activity : mList) { if (activity != null) activity.finish(); } } catch (Exception e) { e.printStackTrace(); } finally { System.exit(0); } } public void onLowMemory() { super.onLowMemory(); System.gc(); } } 在应用程式里面 的activity的oncreate里面新增SysApplication.getInstance().addActivity(this)如:public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
你可以长按主屏键后,在其中关闭应用程式。但并不能完全退出执行记忆体