android-code-handler

来源:互联网 发布:ubuntu界面太小 编辑:程序博客网 时间:2024/04/30 18:16

来自于vlc 0.9.9版本

 

让handler持有 activity的弱引用,可以及时释放activity。

public abstract class WeakHandler<T> extends Handler {    private WeakReference<T> mOwner;    public WeakHandler(T owner) {        mOwner = new WeakReference<T>(owner);    }    public T getOwner() {        return mOwner.get();    }}


使用

/** * Handle libvlc asynchronous events */private final Handler eventHandler = new VideoPlayerEventHandler(this);private static class VideoPlayerEventHandler extendsWeakHandler<VideoPlayerActivity> {public VideoPlayerEventHandler(VideoPlayerActivity owner) {super(owner);}@Overridepublic void handleMessage(Message msg) {VideoPlayerActivity activity = getOwner();if (activity == null)return;// Do not handle events if we are leaving the VideoPlayerActivityif (activity.mSwitchingView)return;switch (msg.getData().getInt("event")) {case EventHandler.MediaParsedChanged:Log.i(TAG, "MediaParsedChanged");activity.updateNavStatus();if (!activity.mHasMenu&& activity.mLibVLC.getVideoTracksCount() < 1) {Log.i(TAG, "No video track, open in audio mode");activity.switchToAudioMode();}break;case EventHandler.MediaPlayerPlaying:Log.i(TAG, "MediaPlayerPlaying");activity.stopLoadingAnimation();activity.showOverlay();/** * FIXME: update the track list when it changes during the * playback. (#7540) */activity.setESTrackLists(true);activity.setESTracks();activity.changeAudioFocus(true);activity.updateNavStatus();break;case EventHandler.MediaPlayerPaused:Log.i(TAG, "MediaPlayerPaused");break;case EventHandler.MediaPlayerStopped:Log.i(TAG, "MediaPlayerStopped");activity.changeAudioFocus(false);break;case EventHandler.MediaPlayerEndReached:Log.i(TAG, "MediaPlayerEndReached");activity.changeAudioFocus(false);activity.endReached();break;case EventHandler.MediaPlayerVout:activity.updateNavStatus();if (!activity.mHasMenu)activity.handleVout(msg);break;case EventHandler.MediaPlayerPositionChanged:if (!activity.mCanSeek)activity.mCanSeek = true;// don't spam the logsbreak;case EventHandler.MediaPlayerEncounteredError:Log.i(TAG, "MediaPlayerEncounteredError");activity.encounteredError();break;case EventHandler.HardwareAccelerationError:Log.i(TAG, "HardwareAccelerationError");activity.handleHardwareAccelerationError();break;case EventHandler.MediaPlayerTimeChanged:// avoid useless error logsbreak;default:Log.e(TAG, String.format("Event not handled (0x%x)", msg.getData().getInt("event")));break;}activity.updateOverlayPausePlay();}};


 

0 0
原创粉丝点击