【发布时间】:2015-05-16 22:14:26
【问题描述】:
我想finish() 来自班级RenderView 的活动VideoPlayer。但是从RenderView 调用finish() 不会调用onDestroy()。 Activity 不会被销毁,也不会返回到之前的 Main Activity。
public class VideoPlayer extends Activity {
@Override
protected void onPause(){
super.onPause();
renderView.pause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
naClose2();
}
}
mFinished = true 但它返回到调用finish() 的方法parseServerInfo() 并继续执行其余代码。
编辑
public class RenderView extends SurfaceView implements SurfaceHolder.Callback {
private Context mContext;
private Runnable prDisplayVideoTask = new Runnable() {
public void run() {
if(zoomState.isPlaying()==false){
if(zoomState.getFlag()==FlagType.PAUSE){
zoomState.setFlag(FlagType.NONE);
naPause();
}
} else {
naStart();
}
prVideoDisplayHandler.postDelayed(this, prDelay);
}
};
public RenderView(...) {
super(_context);
this.mContext = _context;
init(address, windowWidth, windowHeight, videoWidth, videoHeight,
server_ip, server_port);
SurfaceHolder holder = getHolder();
holder.setFormat(PixelFormat.RGBA_8888);
holder.addCallback(this);
}
@SuppressLint("NewApi")
public void init(...) {
parseServerInfo(receivedData);
prVideoDisplayHandler.removeCallbacks(prDisplayVideoTask);
prVideoDisplayHandler.postDelayed(prDisplayVideoTask, prDelay);
}
public void pause(){
naPause();
prVideoDisplayHandler.removeCallbacks(prDisplayVideoTask);
}
public void resume(){
prVideoDisplayHandler.postDelayed(prDisplayVideoTask, prDelay);
}
public void parseServerInfo(String data) {
if (numCameras == 0) {
Toast.makeText(mContext, "No stream detected!", Toast.LENGTH_LONG).show();
// Finish is called here
VideoPlayer videoplayer = (VideoPlayer) mContext;
videoplayer.finish();
return;
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (mCreated == true) {
surfaceDestroyed(holder);
}
Surface surface = holder.getSurface();
render(surface);
mCreated = true;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCreated = false;
}
}
希望有人能帮助指出我做错了什么。
【问题讨论】:
-
我也是初学者。改用 getActivity(),因为你想完成活动。
-
@UmeshChhabra 如果我没记错的话,不可能从 SurfaceView 调用 getActivity()。因此,我使用 getContext() 来获取对 Activity 的引用。
-
getContext.getActivity();
-
只需使用 ((VideoPlayer).getContext()).finish();您不需要保留对上下文的显式引用,您的视图已经引用了它。
-
@zgc7009 这就是我实现它的方式,我根据建议的解决方案使用了
mContext。但是,两者都不能解决问题。
标签: java android android-activity surfaceview