相关疑难解决方法(0)

finish()和System.exit(0)之间的区别

我在谈论android中的编程.

在早期我想,finish() 关闭当前活动并返回活动堆栈中的上一个,并System.exit(0) 关闭整个应用程序.

但是我错了.我做了一个小实验并且明白两者都只完成当前的活动.


我能注意到的唯一区别是,在Android 2.3.3中

  • ActivityResult传播回onActivityResult()finish().而 onActivityResult()不是要求System.exit(0).

但是在Android 4.2.2中,两者都调用了onActivityResult()!对于exit(),Intent为null.(我只测试了这2个设备)

  • 使用退出(),而当有一个时间滞后finish()更快的.(好像更多后台操作是否有退出())

所以,

  1. 两者有什么区别?

  2. 在哪种情况下,我可以使用exit()?

我相信在这两种方法之间我还缺少一些东西.希望有人可以解释更多并纠正我.

谢谢

编辑请求:

制作包含2项活动的Android应用程序.使用Intent从Launcher活动中调用第二个Activity.现在,在第二个活动中,点击一下按钮,就可以了System.exit(0);." VM停止进一步执行,程序将退出. "????(根据文档)

我看到那里的第一个活动.为什么?(欢迎你证明我错了/我是对的)

android activity-finish

35
推荐指数
3
解决办法
4万
查看次数

关闭Android应用程序

请建议我如何使用一行代码关闭整个Android应用程序.

android

34
推荐指数
2
解决办法
11万
查看次数

按下"后退"按钮时如何终止活动?

我有一个活动,当它启动时,它从互联网加载图像.为了节省内存,当按下后退按钮留下Activity时,我希望活动转储所有数据,即删除其中的所有字符串和图像.我认为最好的方法是杀死活动.

好吧,我似乎无法弄清楚按下后退按钮时的回调.所以,我一直在尝试使用onPause()onStop()回调来完成任务,但两种方式强制关闭我的应用程序.这是代码:

public void onPause() {
    this.finish();
}
public void onStop() {
    finish();
}
Run Code Online (Sandbox Code Playgroud)

我尝试过多种变体,但似乎都没有.有任何想法吗?

android kill button back android-activity

31
推荐指数
5
解决办法
13万
查看次数

当活动被破坏时,活动背叛的不当行为

我有两个活动; 假设A和B activity A是有广播接收器注册侦听将完成活动A.我注册的广播接收器的特定事件 onCreate(),并摧毁它onDestroy()activity A.

为简单起见,有一个buttonactivity B名为"破坏活性的A".当用户点击时button,activity A应该销毁.

通常所有这些都运行顺利,没有任何问题,但问题出现在以下场景中:

1)假设我在activity B,我按Home键将应用程序移动到后台然后如果我使用其他资源繁重的应用程序,Android系统将杀死我的应用程序以释放内存.然后,如果我最近的任务打开我的应用程序时,activity B将被收回,这是onCreate(),onResume()等方法将被调用.现在我按button摧毁activity A,但活动A已经被破坏,所以activity AonCreate(),onResume()等方法将不会被调用之前,除非我去activity Aback button.因此broadcast receiver没有注册来监听事件.

2)当用户在设备的设置中从Developer选项中选择"Do not keep activities"时,会出现同样的问题.

我一直在寻找解决这个问题很长一段时间,但我无法找到合适的答案.处理这种情况的最佳方法是什么?这是Android的错误吗?这个问题应该有一些解决方案.

请帮我.

android broadcastreceiver android-lifecycle android-activity back-stack

25
推荐指数
2
解决办法
1402
查看次数

按下后退出Android应用程序

我正在构建一个Android应用程序.按下后退时如何退出Android应用程序.Android版本为2.3.3及以上版本.Android应用程序转到以前我不想要的活动.

android

24
推荐指数
10
解决办法
7万
查看次数

一次关闭所有最近打开/运行的应用程序按钮 - 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)

android android-intent android-layout android-activity

22
推荐指数
2
解决办法
3258
查看次数

如何以编程方式强制停止我的android应用程序?

当我点击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 termination forceclose

21
推荐指数
3
解决办法
7万
查看次数

Intent.FLAG_ACTIVITY_CLEAR_TOP不会删除活动堆栈

我正在开发应用程序,我想在按钮点击关闭整个应用程序.我知道在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是在完成活动后打开的.

我如何实现这一目标?任何想法和建议将不胜感激.

感谢和问候

android android-intent

19
推荐指数
3
解决办法
3万
查看次数

如何杀死我自己的活动 - 艰难的方式

所以我有我的活动,按下"退出"按钮我调用Activity.finish().这有效地关闭了我的申请.

问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样闲逛.看起来这是正常的,因为其他应用程序也这样做.甚至hello-world示例也在内存中徘徊.

我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦.我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样).

一切都以某种方式保持活着,没有任何理由.

我怎样才能真正从记忆中删除我的活动?

我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西.

android kill process android-activity

16
推荐指数
4
解决办法
4万
查看次数

当应用程序的所有活动完成后会发生什么?

场景:

我在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()).

问题:

  1. 通过调用每个活动的finish()完成所有活动将关闭应用程序(其过程)?
  2. 即使所有活动都已完成(已关闭),变量的值如何仍然存在?
  3. 呼叫System.exit(10)Process.killProcess(Process.myPid())退出申请是否公平?

更新:

如何在退出应用程序时清除应用程序常量(BackAnd HomeActivity)?

android process android-activity

16
推荐指数
2
解决办法
2178
查看次数