Я создаю приложение, которое генерирует и добавляет представление динамически. Я не знаю заранее, какие виды мне нужно создавать, это могут быть вложенные макеты или простые ярлыки и т. Д., В зависимости от того, что возвращается из веб-служб.Добавление вложенных представлений динамически зависает App
Все было хорошо до тех пор, пока я не начал создавать действительно сложные вложенные макеты. У меня есть один случай, когда мне нужно добавить около 11 уровней макетов динамически. Когда активность начинается, я показываю ProgressDialog (ring), в то время как создается представление. Моя проблема в том, что с этой сложной структурой ProgressDialog зависает, пока добавляются представления. Это код, который создает вид:
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);
}
}
}
Layout, который имеет другие представления в нем реализует BackgroundTaskViewCreatedResponse
, поэтому, когда вид готов, он будет добавлен:
@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.post
не вызывается из коробки, поэтому я внес некоторые изменения в представления, как это предложено в this SO answer. Итак, теперь мои взгляды добавлены, но мой ProgressDialog работает не плавно. Он останавливается в нескольких случаях, а затем возобновляется. Я также пробовал использовать Android AsyncTask
, но при этом тот же эффект, что и runOnUiThread
Я не очень опытен с Threads, пытаюсь исправить это в течение нескольких дней. Пожалуйста помоги.
'Я не очень опытный с Threads' <= вы должны это исправить ... но сначала использовать некоторые профилирования инструмент и проверить, что занимает большую часть времени ... – Selvin
@Selvin: Спасибо, Я уже пытался использовать StrictMode и, похоже, не имел никаких нарушений правил. В настоящее время вы пытаетесь использовать это: http://developer.android.com/tools/debugging/debugging-tracing.html. Есть ли что-нибудь еще, что вы могли бы предложить? – etilia