Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android addView in background thread

I need to add lots of views in a loop, while this fragment does that, the app will also have a navigation drawer and action bar where the user can do things.

so I would like this process to not a) slow down the app by blocking the user, b) preferably add the views in a background thread.

The dilemma is that I think android doesn't like views to be added in a non-UI thread, so is there a best practice for this? I plan to have a progress bar view object visible in the fragment's view while the rest of the views are being generated with the addView and associated computations

like image 514
CQM Avatar asked Sep 25 '13 19:09

CQM


1 Answers

Instead of adding view on a background thread you can parcel out the work by posting several Runnables on the UI thread. The code below is a highly simplified version of that technique but it's similar to how it was done in Android's Launcher app:

private void createAndAddViews(int count) {
    for (int i = 0; i < count; i++) {
         // create new views and add them
    }
}

Runnable r = new Runnable() {
    public void run() {
        createAndAddViews(4); // add 4 views
        if (mMoreViewsToAdd) mTopLevelView.post(this);
    }
};

mTopLevelView.post(r);
like image 163
Romain Guy Avatar answered Oct 21 '22 09:10

Romain Guy