使用startActivityForResult()的代码流

时间:2012-08-28 20:24:34

标签: android start-activity

我正在开发Android应用。我有一个Activity来检查我的设备上是否存在XML文件。如果它不存在,我会调用一个执行大量操作的例程,包括从URL下载该文件。

如果确实存在,我想提示(是/否)用户是否要重新下载该文件,或者只是跳过它。

我开始使用Dialog。我看到的讨论说Dialogs只是异步的,所以我转而使用Activity来提示是/否。

进一步阅读之后,我相信真正的答案是使用startActivity()启动一个Activity会异步启动Activity,但使用startActivityForResult()会同步关闭(阻塞)。这个陈述是否正确?

好的,假设我的上述陈述是正确的,我一直在研究如何回到代码流程中的原始起点,知道用户选择了哪个按钮(是/否)。

所有的例子都告诉我,我需要使用它来获得我的结果。

protected void onActivityResult(int requestCode, int resultCode,Intent data) {

}

我正在努力解决如何将其放入我的代码中以使其更容易流动。我看到很多示例都显示了所需的代码片段,但我不清楚它们是如何组合在一起的。我的代码结构是否像这样结束:

public class MainScreen extends Activity    {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    protected void onButtonClick(parameters)    {
        /* Do some work to see if the file exists */
        if (!file.exists()) {
            runComplexRoutine(various_parameters);

        } else {
            Intent myIntent = new Intent(getBaseContext(), PromptingActivity.class);
            myIntent.putExtra("filename", variable_holding_filename);   // Just passing a parameter to use in the title of the caled Activity
            startActivityForResult(myIntent, 1);
                        // Point A
        }
    }


    protected void onActivityResult(int requestCode, int resultCode,Intent data) {
        if (resultsCode == Activity.RESULT_OK)  {
            runComplexRoutine(various_parameters);
        }
        // else, do nothing...
    }

}

我的问题是我必须传递大量的various_parameters。如果我可以在Point A恢复流量会很棒,但这似乎不可能。我在这里纠正吗?

2 个答案:

答案 0 :(得分:1)

startActivityForResult()是异步的。由于用户界面会发生变化并且您的通话活动将暂停(您的onPause()方法将会被调用),因此它可以让用户感到同步。

然而,您的通话活动仍然可以运行代码;当你为结果启动的活动完成时,你将实现一个回调来调用(这使得它非常像一个对话框)。

答案 1 :(得分:0)

我发现使用 startActivityForResultonActivityResult 会将 startActivityForResult 之后的流移动到 onActivityResult 并中断 startActivityForResult 的流。我想过如何在startActivityForResult之后继续流动而不破坏它。在思考合适的方法的同时,我终于找到了“从活动中获得结果”的内容。希望这会有所帮助。

这是a link