精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-15
最后修改:2011-07-16
1.ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); manager.killBackgroundProcesses(package); 不行 2.android.os.Process.killProcess(android.os.Process.myPid()); 也不行 3.manager.restartPackage(package); 还是不行 4. Intent MyIntent = new Intent(Intent.ACTION_MAIN); MyIntent.addCategory(Intent.CATEGORY_HOME); startActivity(MyIntent); finish(); 这个只是退回到桌面,如果打开多个Activity关闭重新打开也会有问题,还是还是不行 看到有说广播机制,发现是个好东东,能彻底解决这个问题,废话不说看代码: public abstract class EnterActivity extends BaseActivity { ... // 写一个广播的内部类,当收到动作时,结束activity private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { close(); unregisterReceiver(this); // 这句话必须要写要不会报错,不写虽然能关闭,会报一堆错 } }; @Override public void onResume() { super.onResume(); // 在当前的activity中注册广播 IntentFilter filter = new IntentFilter(); filter.addAction(Attribute.PAGENAME); registerReceiver(this.broadcastReceiver, filter); // 注册 } /** * 关闭 */ public void close() { Intent intent = new Intent(); intent.setAction(Attribute.PAGENAME); // 说明动作 sendBroadcast(intent);// 该函数用于发送广播 finish(); } ... } 别人写的缺了个地方(unregisterReceiver)这个必须要加,找了个最简单的方法 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-15
Very good !!
|
|
返回顶楼 | |
发表时间:2011-07-18
赞一个!!我昨天也遇到不能退出的问题!
|
|
返回顶楼 | |
发表时间:2011-07-18
嗯,又是Android完全退出程序。在GoogleGroup常常看到这种问题。有点儿不明白,楼主在什么情况下需要“完全退出程序”呢?
按照Android的设计理念,一个Application可以类比成一个网站,一个Activity就像一个网页。系统在需要资源的时候才会摧毁一个Application。对于用户而言,他们点Back键的时候不会有“彻底退出这个程序”的概念,就像你在浏览器上看完这个论坛关浏览器也不会想“彻底摧毁这个网页”一样。 你如果放眼看现在的一些WebOS,以及Apple的iOS等其他的系统,都有类似的设计观念:用户不需要在乎程序是不是退出了,一段时间一个程序处于“不活跃”的状态它就会被系统退出。 任何时候你都可以通过一些奇特的步骤退出一个Android程序。但是我个人觉得这种办法有两个坏处:一是你的“退出程序”的代码在Android疯狂升级的过程中是否一直有效?毕竟你的行为是与它的模型相悖的。二是如果你的程序还有做iphone版本,web版本的想法,你现在的model是否可用? 总之,我一直觉得一个设计正确的android程序是不需要一段“彻底退出程序”的代码的。 |
|
返回顶楼 | |
发表时间:2011-07-18
试试forceStopPackage看看可以用吗?
|
|
返回顶楼 | |
发表时间:2011-07-18
lenciel 写道 嗯,又是Android完全退出程序。在GoogleGroup常常看到这种问题。有点儿不明白,楼主在什么情况下需要“完全退出程序”呢?
按照Android的设计理念,一个Application可以类比成一个网站,一个Activity就像一个网页。系统在需要资源的时候才会摧毁一个Application。对于用户而言,他们点Back键的时候不会有“彻底退出这个程序”的概念,就像你在浏览器上看完这个论坛关浏览器也不会想“彻底摧毁这个网页”一样。 你如果放眼看现在的一些WebOS,以及Apple的iOS等其他的系统,都有类似的设计观念:用户不需要在乎程序是不是退出了,一段时间一个程序处于“不活跃”的状态它就会被系统退出。 任何时候你都可以通过一些奇特的步骤退出一个Android程序。但是我个人觉得这种办法有两个坏处:一是你的“退出程序”的代码在Android疯狂升级的过程中是否一直有效?毕竟你的行为是与它的模型相悖的。二是如果你的程序还有做iphone版本,web版本的想法,你现在的model是否可用? 总之,我一直觉得一个设计正确的android程序是不需要一段“彻底退出程序”的代码的。 呵呵,其实网站形式是没有退出,只要返回就可以了,但是你别忘了网站是有session的,android是无状态的,多个activity之间你无法知道是否是登录过的,因为我做的是android上的oa系统,必须是要有状态的,我不希望我打开一次系统之后就一直在那里退不出去,如果你是做j2ee的话你应该清楚这种带来的后果,虽然用cookie可以保存数据用于下次打开登录,但是网页也并不是不能完全关闭,多个网页是嵌入在浏览器里,浏览器一旦关闭你随之应用也就关掉了,这跟android上做东西没什么区别,只是你做的android程序最主要的是用不用登录,用不用保持像网站一样的session这种状态,如果不用那根本不用做退出,但如果要保持状态我想所有人都会要求做退出,你可以用像cookie这种方式保存状态,但退出一定要做,还有一个给你拿android上的QQ举例,如果android上的QQ不做退出,那我岂不是一直打开那个号,连关都关不掉,你感觉这样合适吗? |
|
返回顶楼 | |
发表时间:2011-07-18
我比较关注的是 这个方法在其它版本上能通用吗?
|
|
返回顶楼 | |
发表时间:2011-07-18
我的建议,将记录下来的状态清空或者置于初始状态,然后finish~
其他的别管了 |
|
返回顶楼 | |
发表时间:2011-07-18
VeryGood
|
|
返回顶楼 | |
发表时间:2011-07-19
最后修改:2011-07-19
iaiai 写道 呵呵,其实网站形式是没有退出,只要返回就可以了,但是你别忘了网站是有session的,android是无状态的,多个activity之间你无法知道是否是登录过的,因为我做的是android上的oa系统,必须是要有状态的,我不希望我打开一次系统之后就一直在那里退不出去,如果你是做j2ee的话你应该清楚这种带来的后果,虽然用cookie可以保存数据用于下次打开登录,但是网页也并不是不能完全关闭,多个网页是嵌入在浏览器里,浏览器一旦关闭你随之应用也就关掉了,这跟android上做东西没什么区别,只是你做的android程序最主要的是用不用登录,用不用保持像网站一样的session这种状态,如果不用那根本不用做退出,但如果要保持状态我想所有人都会要求做退出,你可以用像cookie这种方式保存状态,但退出一定要做,还有一个给你拿android上的QQ举例,如果android上的QQ不做退出,那我岂不是一直打开那个号,连关都关不掉,你感觉这样合适吗?
你扯上的这些“session”,“cookie”,“下线”跟完全退出程序没有任何关系。安全级别比OA系统高得多的android程序一大把,没有哪个会去做“完全退出程序”的动作。拿你说的qq举例,它是起了单独的service,service提供所有的功能接口。一些bind到这个service的activity提供用户使用的UI。当用户选择“退出”的时候,只不过是停止这个service,然后finish当前界面而已。Linux的进程还是cache在那里的。 如果你还想争论,建议你先看看这些: http://stackoverflow.com/questions/3241322/android-howto-kill-my-own-activity-the-hard-way http://stackoverflow.com/questions/2033914/quitting-an-application-is-that-frowned-upon |
|
返回顶楼 | |