Я хочу до finish()
деятельность VideoPlayer
от класса RenderView
. Однако вызов finish()
от RenderView
не позвонил onDestroy()
. Активность не уничтожается и не возвращается к предыдущей основной деятельности.Calling finish() от SurfaceView не разрушает Деятельность
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
, но он возвращается назад к методу parseServerInfo()
где finish()
был вызван и продолжает выполнение остальной части кода.
EDIT
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 Если я не ошибаюсь, его нельзя вызвать getActivity() из SurfaceView. Поэтому я использовал getContext(), чтобы получить ссылку на Activity. – miazima
getContext.getActivity(); –