我在谈论android中的编程.
在早期我想,finish() 关闭当前活动并返回活动堆栈中的上一个,并System.exit(0) 关闭整个应用程序.
但是我错了.我做了一个小实验并且明白两者都只完成当前的活动.
我能注意到的唯一区别是,在Android 2.3.3中
onActivityResult()用finish().而 onActivityResult()不是要求System.exit(0).但是在Android 4.2.2中,两者都调用了onActivityResult()!对于exit(),Intent为null.(我只测试了这2个设备)
finish()是更快的.(好像更多后台操作是否有退出())所以,
两者有什么区别?
在哪种情况下,我可以使用exit()?
我相信在这两种方法之间我还缺少一些东西.希望有人可以解释更多并纠正我.
谢谢
编辑请求:
制作包含2项活动的Android应用程序.使用Intent从Launcher活动中调用第二个Activity.现在,在第二个活动中,点击一下按钮,就可以了System.exit(0);." VM停止进一步执行,程序将退出. "????(根据文档)
我看到那里的第一个活动.为什么?(欢迎你证明我错了/我是对的)
我有一个活动,当它启动时,它从互联网加载图像.为了节省内存,当按下后退按钮留下Activity时,我希望活动转储所有数据,即删除其中的所有字符串和图像.我认为最好的方法是杀死活动.
好吧,我似乎无法弄清楚按下后退按钮时的回调.所以,我一直在尝试使用onPause()和onStop()回调来完成任务,但两种方式强制关闭我的应用程序.这是代码:
public void onPause() {
this.finish();
}
public void onStop() {
finish();
}
Run Code Online (Sandbox Code Playgroud)
我尝试过多种变体,但似乎都没有.有任何想法吗?
我有两个活动; 假设A和B activity A是有广播接收器注册侦听将完成活动A.我注册的广播接收器的特定事件 onCreate(),并摧毁它onDestroy()的activity A.
为简单起见,有一个button在activity B名为"破坏活性的A".当用户点击时button,activity A应该销毁.
通常所有这些都运行顺利,没有任何问题,但问题出现在以下场景中:
1)假设我在activity B,我按Home键将应用程序移动到后台然后如果我使用其他资源繁重的应用程序,Android系统将杀死我的应用程序以释放内存.然后,如果我最近的任务打开我的应用程序时,activity B将被收回,这是onCreate(),onResume()等方法将被调用.现在我按button摧毁activity A,但活动A已经被破坏,所以activity A的onCreate(),onResume()等方法将不会被调用之前,除非我去activity A按back button.因此broadcast receiver没有注册来监听事件.
2)当用户在设备的设置中从Developer选项中选择"Do not keep activities"时,会出现同样的问题.
我一直在寻找解决这个问题很长一段时间,但我无法找到合适的答案.处理这种情况的最佳方法是什么?这是Android的错误吗?这个问题应该有一些解决方案.
请帮我.
android broadcastreceiver android-lifecycle android-activity back-stack
我正在构建一个Android应用程序.按下后退时如何退出Android应用程序.Android版本为2.3.3及以上版本.Android应用程序转到以前我不想要的活动.
我想立刻关闭所有最近的应用程序.我找到了以下代码,但它只显示了最近的应用程序.我想关闭所有这些最近的应用程序.
显示所有最近的应用列表代码:(但我不想列表我需要关闭所有最近的应用程序)
Class serviceManagerClass = Class.forName("android.os.ServiceManager");
Method getService = serviceManagerClass.getMethod("getService", String.class);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar");
Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor());
Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder });
Method clearAll = statusBarClass.getMethod("toggleRecentApps");
clearAll.setAccessible(true);
clearAll.invoke(statusBarObject);
Toast.makeText(getApplicationContext(), "All recent app closed....", Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud) 当我点击closeButton时,我想强制停止我的Android应用程序.这是我的代码.
protected void onCreate(Bundle savedInstanceState) {
this.setContentView(R.layout.layoutxml);
this.closeButton = (Button)this.findViewById(R.id.close);
this.closeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这完成了我的申请.如果我去Settings -> Applications -> Manage applications -> <my application name>,我可以看到'强制停止'按钮已启用.这是否意味着我的申请没有完全停止?
如何完全完成我的Android应用程序并禁用"设置"中的"强制停止"按钮?从我有限的经验,当一个"异常"(前.NullPointerException异常)的应用程序时,其异常停止,看起来完全完成,而"强制停止"按钮看起来禁用.
我正在开发应用程序,我想在按钮点击关闭整个应用程序.我知道在android中我们不应该考虑关闭应用程序,因为android会自动执行此操作退出应用程序不满意吗?.但我想关闭我的申请.
所以我正在做什么来关闭应用程序是我使用Intent.FLAG_ACTIVITY_CLEAR_TOP标志来删除活动堆栈.
Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)
在FinishActivity.class我打电话的onCreate,this.finish()但应用程序没有关闭,之前的活动重新打开.
FinishActivity.class
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.finish();
}
Run Code Online (Sandbox Code Playgroud)
更新:
这是场景
MainActivity->Activity2->Activity3->FinishActivity
Run Code Online (Sandbox Code Playgroud)
这Activity2是在完成活动后打开的.
我如何实现这一目标?任何想法和建议将不胜感激.
感谢和问候
所以我有我的活动,按下"退出"按钮我调用Activity.finish().这有效地关闭了我的申请.
问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样闲逛.看起来这是正常的,因为其他应用程序也这样做.甚至hello-world示例也在内存中徘徊.
我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦.我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样).
一切都以某种方式保持活着,没有任何理由.
我怎样才能真正从记忆中删除我的活动?
我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西.
我在Android应用程序中有四个活动,比如A,B,C和D. Constants.java应用程序中有一个类可以扩展Application类以维护全局应用程序状态.Constants类包含应用程序的所有常量变量.活动流程是这样的A-->B-->C-->D.当从活动A按下后退按钮时,我正在调用finish()方法,该方法将完成活动A并关闭应用程序.之后,如果我从所有应用程序打开应用程序,则会有一个变量,Constants.java其值在上次启动时仍然存在.当我从活动A(背面按下)开始System.exit(10)跟随时,同样的事情不会发生Process.killProcess(Process.myPid()).
System.exit(10)后Process.killProcess(Process.myPid())退出申请是否公平?如何在退出应用程序时清除应用程序常量(BackAnd HomeActivity)?