0

을 실행 호출하지 않습니다 나는 다음과 같은 코드를 가지고 : 로그 캣에서제대로 작동하지 않습니다 내 비동기 작업은 내 버튼에

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

내가 얻을 :

이 내 AsyncTask를 클래스

Log.i(TAG, "!isFirstVideo: " + isFirstVideo); 
ConcatenateVideos concatenateVideos = new ConcatenateVideos(); 
concatenateVideos.setUris(firstVideoUri, fileUri, VideoRecorderActivity.this); 

입니다

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

하지만 doetwBackground 클래스의 첫 번째 줄인 Log.i("VideoRecorderActivity", "concat do in background");은 얻을 수 없습니다. 줄 :

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();를 호출해서는 안 :

+0

전체 logcat 로그를 공유 할 수 있습니까? –

답변

0

해당 서비스의 백그라운드에서 실행되는 서비스. 예를 들어 음악이 서비스와 함께 백그라운드에서 실행될 때 Async 작업은 doInBackground가 작동하지 않아 진행 대화 상자 또는 progressBar가 계속 회전하기 때문에 백그라운드에서 XML을 구문 분석하지 않습니다. 그래서 이전 asynctask 대신 Executor를 사용했습니다. 문제는 다른 액티비티의 배경에서 작동하는 다운로드 관리자가 로컬에 존재하지 않는 데이터베이스의 모든 비디오를 다운로드한다는 것입니다. 그리고이 작업은 asynctask 클래스와 함께 작동하므로이 클래스를 실행할 수 없습니다.

1

당신은 당신의 비동기 작업을 시작해야합니다. 그렇게 할 이유가 없습니다.

+0

참이지만 질문에 대답하지 않습니다. –

+0

onpostexecute에 대해서는 true이지만, ConcatenateVideos 클래스의 setUris 함수에서 내 함수가 실행되었습니다. 다운로드 관리자가 충분한 시간 동안 멈 추면이 asynctask가 시작됩니다. –

0

통화 버튼 클릭에

new ConcatenateVideos().execute() 

방법과 doInBackground() 메소드 내에서

setUris() 

방법.

+0

나는 또한 이것을 시도했지만 작동하지 않는다. 위의 대답을 만들었고 왜 작동하지 않는지 설명했다. 이제는 내 클래스가 ExecutorAsyncTask를 확장하고 AsyncTask는 확장하지 않기 때문이다. –

2

당신은 당신의 백그라운드 작업이 실행을 시작하기 전에 로그 출력

"set uris2" 

을 볼 수 있습니다. 주 스레드에서 execute()을 호출 한 직후에 doInBackground() 메서드가 즉시 실행되기 시작한다는 보장은 없습니다. 그 이후에 즉시 실행되기 시작할 것 같지만 즉시 실행되지는 않습니다.

어쩌면 출력을 찾으려면 logcat 버퍼를 더 내려다보아야할까요?

관련 문제