2013-04-01 1 views
4

먼저 재생되는 mp4 파일 인 소개 동영상이있는 Android 애플리케이션을 작성하고 있습니다. 사용자는 화면을 터치하여 건너 뛸 수 있습니다."활동이 원래 누적 된 창이 누출되었습니다." 로드에 실패한 동영상으로 인해 발생했습니다.

내 안드로이드 에뮬레이터에서 응용 프로그램을 실행하려고하면 "액티비티가 창을 새겼습니다 .. 원래 추가 된"예외가 발생합니다. 거기에 큰 게시물 stackoverflow 내 뭔가가 끝나면 대화 상자를 시작하려고하면 말한다. 내 경우에는 플레이어가 내 비디오 형식을 지원하지 않는다는 대화 상자를 시작하려고합니다.

좋아 .. 그냥 비디오를 건너 뛰고 싶습니다. 오류 및 예외가 발생하지 않습니다.

이 내 소개 활동입니다 : 내가 에뮬레이터가 비디오를 지원하지 않는 것을 알고

package com.tuxin.findasmile; 

import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
//import android.view.Menu; 
import android.view.MotionEvent; 
import android.widget.VideoView; 

public class IntroActivity extends Activity { 

private VideoView video; 
private boolean isMenuStarted=false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_intro); 

    video = (VideoView) findViewById(R.id.videoView1); 
    video.setOnErrorListener(new MediaPlayer.OnErrorListener() { 

     public boolean onError(MediaPlayer mp, int what, int extra) { 
      Intent menu = new Intent(IntroActivity.this,MenuActivity.class); 
      startActivity(menu); 
      finish(); 
      return false; 
     } 
    }); 
    video.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

     public void onCompletion(MediaPlayer mp) { 
      if (!isMenuStarted) { 
       isMenuStarted=true; 
      Intent menu = new Intent(IntroActivity.this,MenuActivity.class); 
      startActivity(menu); 
      finish(); 
      } 

     } 
    }); 
    Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.seaofbuttons); 
    video.setVideoURI(videoUri); 
    video.start(); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (video.isPlaying()) { 
     video.stopPlayback(); 
    } 
    if (!isMenuStarted) { 
    isMenuStarted=true; 
    Intent menu = new Intent(IntroActivity.this,MenuActivity.class); 
    startActivity(menu); 
    finish(); 
    } 
    return false; 

} 


} 

. 하지만 휴대 전화가이 비디오 형식을 지원하지 않는 경우를 지원하고 싶습니다. 나는 예외가 던져지는 것을 원하지 않는다.

04-01 16:32:38.675: E/WindowManager(533): Activity com.tuxin.findasmile.IntroActivity has  leaked window [email protected] that was originally added here 
04-01 16:32:38.675: E/WindowManager(533): android.view.WindowLeaked: Activity com.tuxin.findasmile.IntroActivity has leaked window [email protected] that was originally added here 
04-01 16:32:38.675: E/WindowManager(533): at android.view.ViewRoot.<init>(ViewRoot.java:258) 
04-01 16:32:38.675: E/WindowManager(533): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
04-01 16:32:38.675: E/WindowManager(533): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-01 16:32:38.675: E/WindowManager(533): at android.view.Window$LocalWindowManager.addView(Window.java:424) 
04-01 16:32:38.675: E/WindowManager(533): at android.app.Dialog.show(Dialog.java:241) 
04-01 16:32:38.675: E/WindowManager(533): at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 
04-01 16:32:38.675: E/WindowManager(533): at android.widget.VideoView$4.onError(VideoView.java:386) 
04-01 16:32:38.675: E/WindowManager(533): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1341) 
04-01 16:32:38.675: E/WindowManager(533): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-01 16:32:38.675: E/WindowManager(533): at android.os.Looper.loop(Looper.java:123) 
04-01 16:32:38.675: E/WindowManager(533): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-01 16:32:38.675: E/WindowManager(533): at java.lang.reflect.Method.invokeNative(Native Method) 
04-01 16:32:38.675: E/WindowManager(533): at java.lang.reflect.Method.invoke(Method.java:507) 
04-01 16:32:38.675: E/WindowManager(533): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-01 16:32:38.675: E/WindowManager(533): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-01 16:32:38.675: E/WindowManager(533): at dalvik.system.NativeStart.main(Native Method) 

답변

3

이 질문에 대한 대답은 복잡 할 것이라고 생각했습니다. 내가 할 일은 onError 함수에서 true를 반환하는 것뿐입니다.

비디오를 볼 수 없다는 오류 메시지가 표시된 대화 상자를 표시하려고했습니다. 나는이 액티비티가 유출되어이 액티비티를 보았 기 때문에 이미 다음 액티비티로 옮겨 졌기 때문에 그것을 보지 못했습니다.

false에서 true로 변경하면 VideoView의 동작이 변경되어 메시지가 포함 된 대화 상자가 만들어지지 않으므로 누출이 발생하지 않습니다.

Android remove the videoview pop up message

+0

고마워요! 진행 상황 대화 상자의 유출 상황을 파악하려고 노력 중이었습니다. 오류 처리기였습니다. onError()에서 finish()를 호출 했으므로 시도한 오류 대화 상자를 보지 못했습니다. –

관련 문제