Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用finish()关闭活动;不会让应用程序在下次运行时重新启动!为什么?_Android_Android Activity_Activity Finish - Fatal编程技术网

Android 使用finish()关闭活动;不会让应用程序在下次运行时重新启动!为什么?

Android 使用finish()关闭活动;不会让应用程序在下次运行时重新启动!为什么?,android,android-activity,activity-finish,Android,Android Activity,Activity Finish,我想知道是否有人能解释一下 我有一个活动应用程序,它有一个列表视图。在onCreate()中,我在该listview中填充了一些数据(从sqlite数据库中读取)。我有一个关闭按钮,可以触发finish();也现在,当我按下“关闭”按钮时,“活动”消失,但当我单击桌面上的应用程序图标(或从“电话历史记录”按钮中选择它)时,我会在列表视图中看到所有以前的数据。我正在寻找的功能是在单击“关闭”按钮进行下一次运行后重新启动应用程序。(类似于银行应用程序注销按钮)。(这里的列表视图只是一个说明需要的示例

我想知道是否有人能解释一下

我有一个活动应用程序,它有一个列表视图。在onCreate()中,我在该listview中填充了一些数据(从sqlite数据库中读取)。我有一个关闭按钮,可以触发finish();也现在,当我按下“关闭”按钮时,“活动”消失,但当我单击桌面上的应用程序图标(或从“电话历史记录”按钮中选择它)时,我会在列表视图中看到所有以前的数据。我正在寻找的功能是在单击“关闭”按钮进行下一次运行后重新启动应用程序。(类似于银行应用程序注销按钮)。(这里的列表视图只是一个说明需要的示例,因此在finish()之前清除列表视图是不可接受的。这是一个非常简单明了的请求,我认为不需要任何代码,但如果有人感兴趣,我也会发布一些代码


我想要的是与退出中的银行应用程序相同的行为,当用户离开主屏幕或单击“注销”时,应用程序将完全关闭。我可以使用以下方法实现这一点(第2和第3种)但显然这些解决方案不是最佳做法。那么银行应用程序使用什么方法立即关闭应用程序?我怀疑他们使用的不是最佳做法,例如System.exit(0)?!或者他们真的使用了

  • 许多开发者声称关闭应用程序或终止父活动 什么是操作系统作业

  • 有人说使用:

    intpid=android.as.Process.myPid()

    android.os.Process.killProcess(pid)

  • (根据这一点,这个解决方案不是一个好主意,因为在下一次运行时,应用程序就像上次崩溃一样)

  • 有人说使用System.exit(0);根据这个 也不推荐使用

  • 有人说使用finish();但finish不能满足我的需要


  • 感谢您提供的任何输入

    ,如果您有一种机制允许这样做,那么您就可以在事件总线上注册您的活动,如,并发送一个事件,每个活动都订阅了该事件,他们在该事件上自己调用
    finish()

    另一种可能的解决方案是使用
    startActivityForResult()
    启动每个活动,如果单击
    exit
    按钮,您会说

        public static final int KILL_ACTIVITY_RESULT_CODE = 0xD34DB33F; //why not
    
        public boolean onOptionsMenuItemSelected(MenuItem menuItem) {
              if(menuItem.getId() == R.menu.kill_activity) {
                   setResult(KILL_ACTIVITY_RESULT_CODE);
                   finish();
              }
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(resultCode == KILL_ACTIVITY_RESULT_CODE) {
                setResult(KILL_ACTIVITY_RESULT_CODE);
                finish();
            }
        }
    }
    

    …有一次我看到有人对他们的每一个活动都进行静态引用,并调用
    finish()
    ,但不要这样做,这基本上意味着你作为一个Android程序员失败了,没有什么可以弥补你的罪过。

    作为一个优秀的公共软件,他在评论“静态”中指出问题就在这里!我用静态变量存储数据来填充我的listView。显然,即使你只有一个活动并关闭它,静态变量仍然保持不变!应用程序重新运行! 如果你问我为什么首先使用静态变量,我必须说,对还是错,我想在我的另一个java类(我的databaseHandler.class)之间共享该变量

    为什么Android在关闭应用程序的主要和唯一活动时不清除所有(包括静态变量)资源,这仍然是一个问题,这是我下一个阅读主题!但非常感谢所有就这个问题发表评论的人

    我亦会把问题改为:

    银行应用程序是如何关闭的?finish()对我来说不起同样的作用

    使用finish()关闭活动;不会使应用程序在下一个活动中重新启动 跑!为什么


    如果您在该按钮上重新排序活动堆栈,则可能会重复。单击以删除所有活动并转到主活动,然后只调用finish()。可能会使用FLAG_ACTIVITY_CLEAR_TOP。“那么银行应用程序使用什么方法通过单击立即终止应用程序?”--首先,请用精确的技术术语解释你所说的“终止应用程序”是什么意思。然后,请用精确的技术术语解释你是如何确定“银行应用程序”会“终止应用程序”的。“应用程序不会恢复到以前的关闭活动状态”--这就是
    finish()
    的作用。“finish()不为我做同样的工作”--然后你需要详细解释什么是“同样的工作”以及什么是
    finish()
    没有做的。你可能还想解释“用户离开主屏幕”的意思。“我希望你明白,这里的每个人都不具备相同的android知识水平”--我希望您理解,您必须提供对您不起作用的内容。“当我再次单击应用程序图标时,我会在列表视图中看到所有以前的数据”--如果您调用了
    finish()
    ,当您“再次单击应用程序图标”时,您会看到一个新的活动实例。这意味着无论在哪里“所有以前的数据”是来自,它不在活动范围内,例如在静态数据成员中。您需要确定此数据来自何处,并在不想使用此数据时采取措施不使用该数据。哈哈,您的帖子让我发笑了。我在其他论坛也看到了这种反应。我将尝试您的解决方案,明天让您知道。我很好感谢3d Terminator 3…干杯,只是想让你知道,活动的静态引用与此代码相同:再次感谢你的回复,我不确定我是否遵守…我刚刚更新了问题描述,如果你让我知道如何在我的案例中实现你的解决方案,我将不胜感激。