简体   繁体   English

AsyncTask Android

[英]Asynctask android

I want to run 2 method simultaneously. 我想同时运行2种方法。 However it show only the output of second method. 但是,它仅显示第二种方法的输出。 Can you help me? 你能帮助我吗?

    new AsyncTask<Void, Void, Bitmap>() {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

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

            Run1(); 
            Run2();

            return currentBitmap;
        }
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(bitmap!=null) {

                loadImageToImageView();
            }
        }
    }.execute();

Strategy depends on your tasks. 策略取决于您的任务。

Don't use AsyncTask for simultaneous jobs, because by default it executed serially. 不要将AsyncTask用于同时作业,因为默认情况下它是按顺序执行的。

Your first try can be java Threads, if you don't need UI modification. 如果不需要UI修改,则可以尝试使用Java Threads。

You can post results to UI thread by 您可以通过以下方式将结果发布到UI线程:

  • Activity.runOnUiThread(Runnable) Activity.runOnUiThread(Runnable)
  • View.post(Runnable) View.post(可运行)
  • View.postDelayed(Runnable, long) View.postDelayed(可运行,长)

To process bitmap image consider to use HandlerThread . 要处理位图图像,请考虑使用HandlerThread

You can Use Two Seprate Threads 您可以使用两个单独的线程

// Create two threads:

Thread thread1 = new Thread() {
public void run() {
    Run1();
}

}; };

Thread thread2 = new Thread() {
public void run() {
  Run2();
}

}; };

// Start the both threads.
 thread1.start();
 thread2.start();

// Wait for them both to finish
thread1.join();
thread2.join();

Always execute your async tasks on Thread pool 始终在线程池上执行异步任务

new AsyncTask<Void, Void, Bitmap>() {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

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

        Run1(); 
        Run2();

        return currentBitmap;
    }
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        if(bitmap!=null) {

            loadImageToImageView();
        }
    }
}.executeOnExecutors(AsyncTask.THREAD_POOL_EXECUTOR);

Let me know if it works. 让我知道它是否有效。

Try this 尝试这个

new AsyncTask<Void, Void, Bitmap>() {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

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

        Run1(); 
        Run2();

        return currentBitmap;
    }
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        if(bitmap!=null) {

            loadImageToImageView();
        }
    }
}.executeOnExecutors(AsyncTask.THREAD_POOL_EXECUTOR);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM