Android 我的异步任务无法正常工作,未调用execute
我的按钮上有以下代码:Android 我的异步任务无法正常工作,未调用execute,android,multithreading,android-asynctask,execute,runnable,Android,Multithreading,Android Asynctask,Execute,Runnable,我的按钮上有以下代码: Log.i(TAG, "!isFirstVideo: " + isFirstVideo); ConcatenateVideos concatenateVideos = new ConcatenateVideos(); concatenateVideos.setUris(firstVideoUri, fileUri, VideoRecorderActivity.this); 这是我的asynctask类: public class ConcatenateVideo
Log.i(TAG, "!isFirstVideo: " + isFirstVideo);
ConcatenateVideos concatenateVideos = new ConcatenateVideos();
concatenateVideos.setUris(firstVideoUri, fileUri, VideoRecorderActivity.this);
这是我的asynctask类:
public class ConcatenateVideos extends AsyncTask<String, Void, String> {
private String firstVideoUri, fileUri;
private VideoRecorderActivity videoRecorderActivity;
public void setUris(String firstVideoUri, String fileUri, VideoRecorderActivity videoRecorderActivity) {
Log.i("VideoRecorderActivity", "set uris");
this.firstVideoUri = firstVideoUri;
this.fileUri = fileUri;
this.videoRecorderActivity = videoRecorderActivity;
this.execute();
Log.i("VideoRecorderActivity", "set uris2");
}
@Override
protected String doInBackground(String... params) {
Log.i("VideoRecorderActivity", "concat do in background");
FileInputStream videoMain = null, videoToAppend = null;
try {
videoMain = new FileInputStream(firstVideoUri);
videoToAppend = new FileInputStream(fileUri);
} catch (FileNotFoundException e) {
Log.i("VideoRecorderActivity", "concat file not found " + e);
e.printStackTrace();
}
if (videoMain != null && videoToAppend != null) {
concatenateVideos(videoMain, videoToAppend);
videoRecorderActivity.deleteCancelledRecording(fileUri);
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
VideoRecorderActivity.recordButton.setEnabled(true);
VideoRecorderActivity.okButton.setEnabled(true);
VideoRecorderActivity.mySurfaceView.setEnabled(true);
Toast.makeText(videoRecorderActivity, "Video appended succesfully", Toast.LENGTH_SHORT).show();
Log.i("VideoRecorderActivity", "concat touche enabled record, ok ,surface: " + VideoRecorderActivity.recordButton.isEnabled() + "| " + VideoRecorderActivity.okButton.isEnabled() + "|" + VideoRecorderActivity.mySurfaceView.isEnabled());
}
但是我没有得到Log.i(“VideoRecorderActivity”,“concat do in background”)这是doInBackground类的第一行,在这两行之间调用:
Log.i("VideoRecorderActivity", "set uris");
this.firstVideoUri = firstVideoUri;
this.fileUri = fileUri;
this.videoRecorderActivity = videoRecorderActivity;
this.execute();
Log.i("VideoRecorderActivity", "set uris2");
知道我做错了什么吗?您需要启动异步任务:
ConcatenateVideos concatenateVideos = new ConcatenateVideos();
concatenateVideos.setUris(firstVideoUri, fileUri, VideoRecorderActivity.this);
concatenateVideos.execute(); // let's roll
另外,您不应该调用
super.onPostExecute()代码>。这样做没有意义 您需要启动异步任务:
ConcatenateVideos concatenateVideos = new ConcatenateVideos();
concatenateVideos.setUris(firstVideoUri, fileUri, VideoRecorderActivity.this);
concatenateVideos.execute(); // let's roll
另外,您不应该调用super.onPostExecute()代码>。这样做没有意义 呼叫
new ConcatenateVideos().execute()
方法单击按钮并单击
setUris()
方法。调用
new ConcatenateVideos().execute()
方法单击按钮并单击
setUris()
方法。您将看到
"set uris2"
在后台任务开始执行之前,在日志输出中。无法保证在从主线程调用execute()
后,您的doInBackground()
方法将立即开始执行。它可能很快就会开始执行,但不会立即执行
也许您只需要进一步查看logcat缓冲区,以找到您期望的输出?您将看到
"set uris2"
在后台任务开始执行之前,在日志输出中。无法保证在从主线程调用execute()
后,您的doInBackground()
方法将立即开始执行。它可能很快就会开始执行,但不会立即执行
也许您只需要在logcat缓冲区中进一步查找,以找到您期望的输出?当任何服务在后台为该活动运行时。例如,当音乐使用服务在后台运行时,异步任务不会在后台解析XML,因为它的doInBackground在那个时候不工作,并且进度对话框或进度条一直在旋转。
这就是为什么我使用Executor而不是旧的asynctask。
问题是我有一个下载管理器,它在另一个活动的背景下工作,从数据库下载本地不存在的所有视频。如果使用asynctask类,则无法执行此任务。当任何服务在后台为该活动运行时。例如,当音乐使用服务在后台运行时,异步任务不会在后台解析XML,因为它的doInBackground在那个时候不工作,并且进度对话框或进度条一直在旋转。
这就是为什么我使用Executor而不是旧的asynctask。
问题是我有一个下载管理器,它在另一个活动的背景下工作,从数据库下载本地不存在的所有视频。使用asynctask类时,它无法执行此任务。True,但这并不能回答问题。True关于onpostexecute,但我的函数是从ConcatenateVideos类中的setUris函数执行的。它会在一段时间后启动,当下载管理器停止足够的时间后,让这个异步任务启动。为True,但这并没有回答问题。为True,关于onpostexecute,但我的函数是从ConcatenateVideos类中的setUris函数执行的。它会在一段时间后启动,当下载管理器停止足够的时间后,让这个异步任务开始。你能共享完整的logcat日志吗你能共享完整的logcat日志吗?我也尝试过这个,但它不起作用,我在上面创建了一个答案,来解释为什么它不起作用,现在之所以如此,是因为我的类现在扩展了ExecutorAsyncTask而不是AsyncTask。我也尝试过这样做,但不起作用,我在上面创建了一个答案,来解释为什么它不起作用,现在之所以如此,是因为我的类现在扩展了ExecutorAsyncTask而不是AsyncTask