gpt4 book ai didi

java - 添加嵌套 View 会动态卡住应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:47 27 4
gpt4 key购买 nike

我正在构建应用程序,它动态生成并添加 View 。我事先不知道需要创建什么 View ,这些 View 可以是嵌套布局或简单标签等,具体取决于从 Web 服务返回的内容。

到目前为止一切都很顺利,直到我开始构建非常复杂的嵌套布局。我有一种情况需要动态添加大约 11 层布局。当 Activity 开始时,我会显示 ProgressDialog(ring),同时生成 View 。我的问题是,使用这种复杂的结构,ProgressDialog 在添加 View 时会卡住。这是创建 View 的代码:

private class ViewCreator implements Runnable {

public BackgroundTaskViewCreatedResponse delegate;
private View mCreatedView;
private ComponentDefinition mComponent;

private ViewCreator(ComponentDefinition component){
this.mComponent = component;
}

@Override
public void run() {
try {
if (mComponent != null){
mComponent.setLinkedData(model.getLinkedData());
mCreatedView = componentCreator.createComponent(mComponent);
}
} finally {
if (mCreatedView != null)
delegate.processFinishTask(mCreatedView);
}
}
}

其中包含其他 View 的布局实现了BackgroundTaskViewCreatedResponse,因此,当 View 准备好时,它将被添加:

@Override
public void processFinishTask(final View createdView) {
//((Activity)view.getContext()).runOnUiThread(new Runnable(){
mView.post(new Runnable(){
@Override
public void run() {
mView.addView(createdView);
}
});
}

正如您在上面看到的,我尝试调用 runOnUiThread 调用,但这会在生成 View 层次结构时完全阻塞 UI 线程。同时 view.post 不会立即被调用,因此我按照 this SO answer 中的建议对 View 进行了一些更改。 。所以,现在我的 View 已添加,但我的 ProgressDialog 运行不顺畅。它偶尔会停止,然后又恢复。我也尝试过使用 Android AsyncTask,但这与 runOnUiThread

具有相同的效果

我对线程不太有经验,几天来一直在尝试解决这个问题。请帮忙。

最佳答案

您可以使用 AsyncTask 来执行此操作/这是一个示例:

private class GenerateViews extends AsyncTask<Void,Void,Void>{

@Override
protected void onPreExecute() {
// SHOW THE SPINNER WHILE GENERATING VIEWS
spinner.setVisibility(View.VISIBLE);

}

@Override
protected Void doInBackground(Void... params) {

//CALL YOUR VIEW GENERATING METHOD HERE

return null;
}

@Override
protected void onPostExecute(Void result){

spinner.setVisibility(View.INVISIBLE);

}
}

如果您愿意,您可以在您的类(class)中创建此类。然后,你只需调用

new GenerateCalls.execute();

关于java - 添加嵌套 View 会动态卡住应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com