`
shuai1234
  • 浏览: 930900 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

android 使用多个Intent 进行activity跳转 而没有finish的情况,如何直接退出系统

 
阅读更多

<:section>

<!--列表视图页显示缩略图和文章摘要--><!--文章视图页显示全部内容--><!--如果有内容,显示内容-->

就是 N 个 Activity 跳转 没finish(); 最后一个 Activity单击事件 如何推出整个 程序?

很简单:只要在最后一个需要finish掉之前所有的avtivity 的Intent 上加上这样一句话                                                                       

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//注意本行的FLAG设置

参考:http://www.open-open.com/home/space-37924-do-blog-id-5805.html

 

Android-完全退出当前应用程序的四种方法

 

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。

 

 

1. Dalvik VM的本地方法

 android.os.Process.killProcess(android.os.Process.myPid())    //获取PID
 System.exit(0);   //常规java、c#的标准退出法,返回值为0代表正常退出

 

2. 任务管理器方法

  首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限

 ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
 am.restartPackage(getPackageName());
 系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上
 <uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses-permission>

3. 根据Activity的声明周期

 

3.  我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标 志     Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。

在A窗口中使用下面的代码调用B窗口

Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置
startActivity(intent);

接下来在B窗口中需要退出时直接使用finish方法即可全部退出。

 

4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:

 

 

 

view source

 

print ?

 

 

 

 

01   public class ScreenManager {

 

 

02 private static Stack<Activity> activityStack;

 

 

03 private static ScreenManager instance;

 

 

04 private  ScreenManager(){

 

 

05 }

 

 

06 public static ScreenManager getScreenManager(){

 

 

07  if(instance==null){

 

 

08   instance=new ScreenManager();

 

 

09  }

 

 

10  return instance;

 

 

11 }

 

 

12//退出栈顶Activity

 

 

13 public void popActivity(Activity activity){

 

 

14  if(activity!=null){

 

 

15   activity.finish();

 

 

16   activityStack.remove(activity);

 

 

17   activity=null;

 

 

18  }

 

 

19 }

 

 

20

 

 

21//获得当前栈顶Activity

 

 

22 public Activity currentActivity(){

 

 

23  Activity activity=activityStack.lastElement();

 

 

24  return activity;

 

 

25 }

 

 

26

 

 

27//将当前Activity推入栈中

 

 

28 public void pushActivity(Activity activity){

 

 

29  if(activityStack==null){

 

 

30   activityStack=new Stack<Activity>();

 

 

31  }

 

 

32  activityStack.add(activity);

 

 

33 }

 

 

34 //退出栈中所有Activity

 

 

35 public void popAllActivityExceptOne(Class cls){

 

 

36  while(true){

 

 

37   Activity activity=currentActivity();

 

 

38   if(activity==null){

 

 

39    break;

 

 

40   }

 

 

41   if(activity.getClass().equals(cls) ){

 

 

42    break;

 

 

43   }

 

 

44   popActivity(activity);

 

 

45  }

 

 

46 }

 

 

47}

 

 

 

 

 

 

分享到:
评论

相关推荐

    Android OnActivityResultDemo

    startActivityForResult()需要一个int类型的请求码,这个请求码会随着Activity A的跳转而带过去,而跳转过去的Activity B finish()的时候,我们需要使用setResult()来设置一个结果码,这个结果码必须为RESULT_OK,...

    Android-教程精华-开发

    以及Activity之间的跳转和数据传输(intent)。 Activity中常用的函数有SetContentView() findViewById() finish() startActivity(),其生命周期涉及的函数有: void onCreate(Bundle savedInstanceState) void ...

    startActivityForResult的简单使用

    定义了4个Activity,主activity跳转到其他2个时附带String good,第二个在接收到数据后将String +"boy"后返回给主Activity并Toast;第三个在接收到数据后将String +"boy&girl"后返回给主Activity并Toast。第4个采用...

    安卓zxing 代码demo

    3.创建一个新的Activity(demo里叫 SecondActivity )集成FragmentActivity,在清单文件里进行配置。 4. 修改新的Activity布局文件,是二维码的背景布局 &lt;FrameLayout xmlns:android=...

    应用启动页自定义跳转计时器View Demo

    应用启动页自定义跳转计时器View Demo: CircleTextProgressbar.java: package com.demo.startpageskiptimerdemo.widget; import android.content.Context; import android.content.res.ColorStateList; import ...

    星座说明书

    同时,还进行了两个Activity的跳转。通过创建线程对象,然后自动调用了run()方法,到达设置的时间时自动跳转启动进入下一个Activity界面。  3.1.2程序 //定义欢迎界面类 public class LaunchActivity extends ...

    andriod精华学习教程

    以及Activity之间的跳转和数据传输(intent)。 Activity中常用的函数有SetContentView() findViewById() finish() startActivity(),其生命周期涉及的函数有: void onCreate(Bundle savedInstanceState) void ...

    android 右滑返回的示例代码

    重写finish()等方法设置activity的跳转动画 重写dispatchTouchEvent()拦截 所需要 右滑动作 重写onTouchEvent()给根布局设置偏移量 添加滑动时上层activity的左侧阴影 滑动时关联下层activity滑动 注意:...

    安卓记事本

    builder.setTitle("退出系统").setMessage("确定退出系统吗?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, ...

    开发一款任意APP-开发一款任意APP需要的类库以及多渠道打包命名框架 如需学习用法详见旧版本:https://github.com/geeklx/jiuzhidao_xinjiagou.zip

    高斯生成二维码效果recycleviewalluses:最强RecycleView写法(待更新)recycleviewgallery:炫酷的RecycleView Galleryrecycleviewmultitype:一个比较好的第三方RecycleView写法 很稳定ringutil:系统声音(待优化...

Global site tag (gtag.js) - Google Analytics