【问题标题】:layout doesn't load until end of method布局直到方法结束才会加载
【发布时间】:2015-07-15 14:24:37
【问题描述】:

我遇到了一个 android 应用程序的活动问题,为了简单起见,我设置了三个活动:主 M、回答 A 的活动和启动 C 的活动。

所以 M 使用 startActivityOnResult 启动 A,然后 A 将结果发送给 M,然后 M 从那里启动 S。

但由于某种原因,直到我从那里调用的主要方法完成后,S 的布局才会更新(当该方法完成时,活动无论如何都会回到 M,所以基本上我只看到布局,如果我让活动 S 不给出结果,站在那里什么都不做)。

这里是一些代码:

在 M 开始 S :

Intent intent = new Intent(MainActivity.this, getCamFind.class);

    intent.putExtra("path", mCurrentPhotoPath);
    startActivityForResult(intent, CAMFIND_REQUEST_CODE);

在 S 中:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_getcamfind);
    receivedIntent = getIntent();
    Log.d(TAG, "Received string : " + receivedIntent.getStringExtra("path"));

}

public void onStart(){
    super.onStart();
    try {
        postCamResult(receivedIntent.getStringExtra("path"));
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

所以这里我说的主要方法是 postCamResult,它基本上使用改造连接到服务器。在这个方法的最后,我通常会放几行来发回结果意图。布局的问题是由于某种原因等待此方法完成?所以如果我不发送结果意图,它会在完成所有与服务器相关的事情之后,最终打印我的布局,但你知道,我希望我的布局在我打开活动后立即出现!

提前谢谢你!

【问题讨论】:

    标签: java android android-layout android-activity oncreate


    【解决方案1】:

    Activity生命周期的Android文档指出Activity的可见生命周期在onStart()onStop()之间,所以你设置的布局会被渲染在 onStart 方法完成之后。 如果你把你的 postCamResult() 放在 onResume() 你应该没问题。

    仍然在 UI 线程上连接到服务器是一个坏主意,您应该为此启动一个单独的线程,否则您可能会得到 anr。

    【讨论】:

    • 是的,我知道线程的事情,我只是在测试一下。不幸的是,您的解决方案不起作用:/
    • 将电话从 onStart() 转移到 onResume() 并没有帮助。您需要从主线程中获取网络 I/O。这会阻止 UI 更新。如果您将postCamResult() 的内容放入后台线程,您应该会立即看到您的布局。
    • 我的错,尽管活动在onStart()onStop() 之间对用户可见,但渲染器可能无法完成布局的渲染,因此您必须按照大卫的建议使用后台线程。
    • 所以我继续做了一个后台线程,现在发生了一些非常奇怪的事情,当线程执行服务器请求时布局回到主活动,所以 S 活动布局根本没有出现?我尝试从 onResume 和 onCreate 调用线程,看看它是否有任何区别,但没有。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多