Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is a good practice create anonymous AsyncTask for parallel small known freeze process? [closed]

Tags:

E.g.: you gonna do something that will take a few seconds and don't wanna freeze your UI thred, right? You could use an AsyncTask but you don't wanna create a external (or inner) class to solve a small freeze problem.

So, is a good pratice do it?

package com.example.stackoverflowsandbox;  import android.os.AsyncTask;  public class Foo {     // E.g. before call foo method you change you Activity to loading state.     private void foo() {         new AsyncTask<Void, Void, Void>() {             @Override             protected Void doInBackground( final Void ... params ) {                 // something you know that will take a few seconds                  return null;             }              @Override             protected void onPostExecute( final Void result ) {                 // continue what you are doing...                  Foo.this.continueSomething();             }         }.execute();     }      private void continueSomething() {         // some code...     } } 

I've faced with that when I compressing Bitmaps and looping big array to update some data inside items.

like image 655
Idemax Avatar asked Jul 18 '14 14:07

Idemax


1 Answers

Yes, but not the way you do it.

Remember that starting Honeycomb the default execution model of AsyncTasks is serial:

  new AsyncTask<Void, Void, Void>() {          ....          ....   }.execute(); <------ serial execution 


Instead use a thread pool executor:

  new AsyncTask<Void, Void, Void>() {          ....          ....   }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); <------ parallel execution 
like image 73
Gilad Haimov Avatar answered Oct 21 '22 03:10

Gilad Haimov