最近开发安卓应用时,要提供一个定时关机的功能,结果使用
finish()
或者android.os.Process.killProcess(android.os.Process.myPid())
都不行,都只能关闭调用的那个activity,而我如果打开了多个activity,则无法完全退出应用。
网上找了一些资料说System.exit(0)方法同以上的两个方法一样,也达不到效果。
相关资料:
http://maxuefeng.blog.51cto.com/1876326/528561
http://www.360doc.com/content/11/0610/17/128678_126052257.shtml
这些资料中另外都介绍了一种方法:
ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
并声明权限:
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
这种方法确实可以达到完全退出程序的目的,但是退得太彻底了,要慎重使用。
因为该方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed所有创建的服务会停止,还会发一个广播 Intent.ACTION_PACKAGE_RESTARTED
导致所有注册alarms被stopped,
notifications被removed。
如果你的程序使用了Alarm,则不能使用该方法。此外,该方法只能使用在1.5-2.2(不含)版本的系统中,2.2之后的需使用ActivityManager的am.killBackgroundProcesses()方法来达到目的。
由于以上方法均不能满足我的目的,因此我自己另外想了一种解决方法:
1、声明一个Activity基类,让所有Activity继承该基类;
2、在该基类中定义一个BroadcaseReceiver,在onReceiv()方法中调用Activity的finish()方法结束Activity;
3、在该基类的onCreate()方法中注册该BroadcaseReceiver,并在onDestroy()方法中取消注册;
4、在需要退出程序的地方发送一个由以上BroadcaseReceiver处理的广播。
这样,当BroadcaseReceiver接受到该广播后,finish()方法便会把所有的Activity结束掉,从而达到退出应用的目的;与此同时,并不会影响注册的Alarms等功能。
分享到:
相关推荐
通常,一个Android应用由多个Activity组成,每个Activity代表一个独立的屏幕或功能。当用户在应用中进行多层级的操作时,会依次打开多个Activity。在用户想要退出应用时,简单地结束当前Activity并不足以完全关闭...
2. **多Activity退出**:在一个应用中有多个Activity时,如果希望一次性关闭所有Activity,可以采用以下策略: - 使用静态变量记录Activity栈:在每个Activity的`onCreate()`方法中添加栈顶Activity的数量,并在`...
1、新建一个 ExitApplication 类继承Application 2、在你要退出的activity Oncreate方法中加入ExitApplication.getInstance().addActivity(this);作用是添加到你的activity历史中。 3、在你当前要完全退出程序的...
在Android开发中,Activity是应用程序的基本组件,负责...通常,Android鼓励用户通过按两次Back键来退出应用,而不是提供一个单独的退出按钮。但根据应用的具体需求,这种一次性退出的机制在某些情况下可能是必要的。
用户可以通过按设备上的返回键从栈顶Activity回退到栈中的前一个Activity,直到任务被清空或者用户手动关闭应用。 TaskStackBuilder是Android提供的一种工具类,用于帮助构建一个符合用户期望的回退栈。当用户点击...
Android代码一键退出客户端 多个Activity推出的时候用到的 原理是把所有打开的activity都放在一个list里面 当点击退出的时候便利list 然后一个一个的结束掉。方法简单易懂,一看就会
此工程为一键退出多个Activity简单示例,所有的Activity同时集成一个ParentActivity,在ParentActivity添加一个菜单触发事件来控制关闭activity,每打开一个Activity就记录下来并添加到一个list中,关闭的时候同时...
在Android开发中,为了让用户能够明确地退出应用,通常会实现一个功能,即连续点击两次返回按钮后退出应用程序。这个功能可以防止用户意外地退出应用,同时也提供了良好的用户体验。下面我们将详细探讨如何在Android...
可以创建一个全局广播接收器,监听特定的事件(如系统广播或自定义广播),在接收到特定广播时,遍历并finish掉所有的Activity,实现应用退出。但这种方法需谨慎使用,因为全局广播接收器可能会消耗额外的资源。 六...
在实际项目中,常常需要多个Activity与一个Service进行通信,比如本例中提到的“service在后台下载”场景。这种通信机制对于实现应用的流畅性和功能完整性至关重要。 首先,我们来看如何创建和启动一个Service。...
在Android应用开发中,"退出程序提示,退出程序后关闭所有Activity"是一个常见的需求,它涉及到用户交互和应用生命周期管理。Activity是Android系统中的一个核心组件,代表了用户与应用进行交互的界面。当用户完成某...
1. 创建一个全局静态变量的Activity栈:在应用的基类或工具类中定义一个ArrayList来存储所有的Activity实例。每当一个新的Activity被创建时,将其添加到栈中。 ```java public class AppManager { private static ...
当需要退出时,一次性清理所有Activity。这种方法适用于需要统一管理多个Activity的复杂应用场景。 ```java public class ActivityManager { private static List<Activity> activities = new ArrayList(); ...
Android应用如何关闭多个Activity,里面有多种方法找出适合自己的方法,欢迎浏览:http://blog.csdn.net/weiwozhiyi/article/details/50791416
Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT).show(); firstBackPressedTime = System.currentTimeMillis(); } else { // 2秒内再次按下返回键,退出应用 finish(); } return true; } ...
例如,我们可以创建两个XML动画资源文件,一个用于进入动画(right_in.xml),另一个用于退出动画(right_out.xml)。这两个文件应放在res/anim目录下。以下是一个简单的示例: right_in.xml: ```xml android:...
当一个Service需要与多个Activity进行数据交换或控制交互时,Broadcast(广播)就起到了关键的作用。 **Broadcast(广播):** BroadcastReceiver是Android系统中的一个重要组件,它用于接收系统或应用发送的广播...
在“viewpager中嵌套多个activity”的场景下,开发者可能会遇到一些挑战,比如如何有效地管理多个Activity之间的数据加载和通信。在这个主题中,我们将深入探讨如何在ViewPager中实现对多个Activity的嵌套,并进行...
在Android平台上,开发一个定时关机的APP涉及到多个关键技术和组件。下面,我们将详细探讨这些技术点。 首先,状态栏通知(Notification)是Android应用与用户进行非侵入式交互的重要方式。`lj API LEVEL 16生成...