1.当来电后返回后,只有声音,没有画面时,是因为当前activity对象被遮挡后,SurfaceView对象被销毁,而activity重新显示时他的重建晚于onResume()方法的执行。
此时应解决SurfaceView的重建问题:
private final class SurfaceCallback implements Callback{
public void surfaceCreated(SurfaceHolder holder) {
if(position >0 && videoFile != null){
try {
playVideo(videoFile);
Log.i(TAG,"position="+ position);
mediaPlayer.seekTo(position);
position = 0;
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}
Log.i(TAG, "surfaceCreated");
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
if(mediaPlayer != null && mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
Log.i(TAG, "surfaceDestroyed");
}
}
为SurfaceView对象添加Callback对象
holder.addCallback(new SurfaceCallback());
2.解决内存不足时应用被杀死问题(应用程序如处于后台,且系统需要内存时会把应用杀死,此时回到播放器界面,需要重新调用onCreate()方法):
protected void onRestoreInstanceState(Bundle savedInstanceState) {
position = savedInstanceState.getInt("position");
String fn = savedInstanceState.getString("fileName");
if(fn!=null){
videoFile = new File(Environment.getExternalStorageDirectory(),fn);
}
super.onRestoreInstanceState(savedInstanceState);
}
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("position", position);
outState.putString("fileName", videoFile.getName());
super.onSaveInstanceState(outState);
此时应解决SurfaceView的重建问题:
private final class SurfaceCallback implements Callback{
public void surfaceCreated(SurfaceHolder holder) {
if(position >0 && videoFile != null){
try {
playVideo(videoFile);
Log.i(TAG,"position="+ position);
mediaPlayer.seekTo(position);
position = 0;
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}
Log.i(TAG, "surfaceCreated");
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
if(mediaPlayer != null && mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
Log.i(TAG, "surfaceDestroyed");
}
}
为SurfaceView对象添加Callback对象
holder.addCallback(new SurfaceCallback());
2.解决内存不足时应用被杀死问题(应用程序如处于后台,且系统需要内存时会把应用杀死,此时回到播放器界面,需要重新调用onCreate()方法):
protected void onRestoreInstanceState(Bundle savedInstanceState) {
position = savedInstanceState.getInt("position");
String fn = savedInstanceState.getString("fileName");
if(fn!=null){
videoFile = new File(Environment.getExternalStorageDirectory(),fn);
}
super.onRestoreInstanceState(savedInstanceState);
}
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("position", position);
outState.putString("fileName", videoFile.getName());
super.onSaveInstanceState(outState);