【发布时间】: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