【问题标题】:How to set delay time for the AsyncTask execution when it uses also another Thread?当 AsyncTask 还使用另一个线程时,如何为它的执行设置延迟时间?
【发布时间】:2014-06-06 15:37:27
【问题描述】:

我想为扩展 AsyncTask 的类设置延迟时间(以毫秒为单位)。但是这个类也使用了另一个java Thread。有一些类可以在 Android 上流式传输 Mjpeg,对此问题进行了一些更改:Android ICS and MJPEG using AsyncTask

这是我的扩展 AsyncTask 的类:

public class GetCameraMjpeg extends AsyncTask<String, Void, MjpegInputStream> {

    @Override
    protected MjpegInputStream doInBackground(String... params) {
        try {
            URL url = new URL(params[0]);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            if (username != null && password != null) {
                String authEncoded = Base64.encodeToString((username + ":" + password).getBytes(), Base64.DEFAULT);
                connection.setRequestProperty("Authorization", "Basic " + authEncoded);
            }
            connection.connect();
            return new MjpegInputStream(connection.getInputStream());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(MjpegInputStream result) {
        mjpegView.setSource(result);
        mjpegView.setDisplayMode(MjpegView.SIZE_FULLSCREEN);
    }
}

MjpegInputStream 类与上面粘贴的 Stackoverflow 问题中的相同。 MjpegView 是扩展 SurfaceView 的类。它包含内部类MjpegViewThread,它是扩展java Thread 类的类。这就是这个线程的run 方法。

@Override
public void run() {
    Bitmap bitmap;
    Rect destRect;
    Canvas canvas = null;
    while (mjpegRun) {
        if (surfaceDone) {
            try {
                canvas = surfaceHolder.lockCanvas();
                if (canvas != null) {
                    synchronized (surfaceHolder) {
                        try {
                            bitmap = mjpegInputStream.readMjpegFrame();
                            if (displayMode != SIZE_FULLSCREEN) {
                                displayWidth = bitmap.getWidth();
                                displayHeight = bitmap.getHeight();
                            }
                            destRect = destRect(bitmap.getWidth(), bitmap.getHeight());
                            canvas.drawColor(Color.TRANSPARENT);
                            canvas.drawBitmap(bitmap, null, destRect, new Paint());
                        } catch (IOException e) {
                            e.getStackTrace();
                            Log.d(TAG, "catch IOException hit in run", e);
                        }
                    }
                }
            } finally {
                if (canvas != null) {
                    surfaceHolder.unlockCanvasAndPost(canvas);
                }
            }
        }
    }
}

我已经尝试过这个答案:How to execute Async task repeatedly after fixed time intervals,但没有明显的区别。我想是MjpegView 运行自己的java Thread。

【问题讨论】:

    标签: java android multithreading android-asynctask


    【解决方案1】:

    使用处理程序 处理程序 h = 新处理程序(); h.postDelay(函数,时间);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多