退出整个应用程序 以及 利用intent标志跳转到某个Activity
2015-01-31 22:25
489 查看
我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这两种操作都没有关闭当前应用程序,没有释放系统资源。有时跳转的activity较多时,还需要多次按返回键,这样感觉一点都不爽。
后面添加了一个菜单返回功能键,这个方法也只能用system.exit(0)来关闭当前活动的Activity,附代码:
或者用
MainActivity.this.finish();//结束当前的Activity
想到这样太不方便了,每次退出界面之后应用程序还在运行,今天查了下资料终于把这个问题给解决了,
网上提供了几种方法,我吸收了下面这个自认为简单易懂的方法,将下面SysApplication这个类复制到工程里面,然后在每个Acitivity的oncreate方法里面通过SysApplication.getInstance().addActivity(this);
添加当前Acitivity到ancivitylist里面去,最后在想退出的时候调用SysApplication.getInstance().exit();可直接关闭所有的Acitivity并退出应用程序。
在应用程序里面 的activity的oncreate里面添加SysApplication.getInstance().addActivity(this)
如:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SysApplication.getInstance().addActivity(this);
}
在需要退出程序的时候,调用:
[java] SysApplication.getInstance().exit();
SysApplication.getInstance().exit();
简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法
参考资料 http://www.2cto.com/kf/201201/117079.html 谢谢网友的分享
直接退到某一个Activity
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,再次开启A时将会清除该进程空间的所有Activity。 在D中使用下面的代码:
Intent intent = new Intent();
intent.setClass(D.this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent); finish();关掉自己
在A中加入代码:
Override
protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub
super.onNewIntent(intent);
//退出
if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
finish();
}
}
A的Manifest.xml配置成android:launchMode="singleTop"
此方法不能退出整个程序,但是能在有较多Activity时,按返回键不方便时,直接跳转到指定的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; }
或者用
MainActivity.this.finish();//结束当前的Activity
想到这样太不方便了,每次退出界面之后应用程序还在运行,今天查了下资料终于把这个问题给解决了,
网上提供了几种方法,我吸收了下面这个自认为简单易懂的方法,将下面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);
setContentView(R.layout.main);
SysApplication.getInstance().addActivity(this);
}
在需要退出程序的时候,调用:
[java] SysApplication.getInstance().exit();
SysApplication.getInstance().exit();
简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法
参考资料 http://www.2cto.com/kf/201201/117079.html 谢谢网友的分享
直接退到某一个Activity
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,再次开启A时将会清除该进程空间的所有Activity。 在D中使用下面的代码:
Intent intent = new Intent();
intent.setClass(D.this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent); finish();关掉自己
在A中加入代码:
Override
protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub
super.onNewIntent(intent);
//退出
if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
finish();
}
}
A的Manifest.xml配置成android:launchMode="singleTop"
此方法不能退出整个程序,但是能在有较多Activity时,按返回键不方便时,直接跳转到指定的Activity.
相关文章推荐
- 在一个activity中kill其他的activity以及退出整个应用程序
- Android利用activity启动模式退出整个应用以及客户端与服务器交互
- Android 应用程序多Activity跳转之后退出整个程序
- 从一个activity跳转到另一个activity,利用intent传递数据
- android 使用多个Intent 进行activity跳转 而没有finish的情况,如何直接退出系统
- preferenceScreen 利用intent跳转activity
- Android:TextView添加下划线以及利用intent跳转到一个网页
- android学习笔记之-利用Intent在多个Activity之间跳转
- Android 使用多个Intent 进行activity跳转 而没有finish的情况,如何直接退出系统
- Preferencescreen中利用intent跳转activity
- android 使用多个Intent 进行activity跳转 而没有finish的情况,如何直接退出系统
- 在一个activity中kill其他的activity及退出整个应用程序
- android应用程序跳转到系统的各个设置页面和通过Intent action 跳转到系统页面,调用系统功能以及action
- Android利用activity启动模式退出整个应用
- Android利用activity启动模式退出整个应用
- Android利用activity启动模式退出整个应用
- 利用Intent实现两个Activity之间的跳转
- android技巧01:Preferencescreen中利用intent跳转activity
- 双击退出整个程序,以及双击退出本Activity
- Android利用activity启动模式退出整个应用