0

私のボタンには、次のコードがあります。

    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());
}

logcatで私は得る:

04-11 12:21:42.520: I/VideoRecorderActivity(7927): set uris
04-11 12:21:42.520: I/VideoRecorderActivity(7927): set uris2

しかし、私はそれLog.i("VideoRecorderActivity", "concat do in background");がdoInBackgroundクラスの最初の行であり、これらの2行の間で呼び出されていることを知りません:

Log.i("VideoRecorderActivity", "set uris");
this.firstVideoUri = firstVideoUri;
this.fileUri = fileUri;
this.videoRecorderActivity = videoRecorderActivity;
this.execute();
Log.i("VideoRecorderActivity", "set uris2");

私が間違っていることはありますか?

4

4 に答える 4

0

そのアクティビティのバックグラウンドでサービスが実行されている場合。たとえば、音楽がサービスを使用してバックグラウンドで実行されている場合、非同期タスクはバックグラウンドで XML を解析しません。これは、その doInBackground がその時点で機能せず、progress Dialog または progressBar が回転し続けたためです。そのため、古い asynctask の代わりに Executor を使用しました。問題は、別のアクティビティのバックグラウンドで動作し、ローカルに存在しないデータベースからすべてのビデオをダウンロードするダウンロード マネージャーがあることでした。そして、これは asynctask クラスで動作しているため、これを実行できませんでした。

于 2013-04-11T12:43:20.267 に答える