surfaceDestroyed方法是在SurfaceView销毁时被调用的。
当SurfaceView所在的窗口被隐藏或者关闭时,Android系统会调用surfaceDestroyed方法。这通常发生在用户按下Home键切换到其他应用,或者按下返回键关闭当前Activity的情况下。
一般情况下,当调用Activity的onDestroy方法时,surfaceDestroyed方法也会被自动调用。在这种情况下,surfaceDestroyed方法的执行顺序通常是先于onDestroy方法。
在surfaceDestroyed方法被调用时,可以执行一系列清理操作,例如释放资源、停止动画、关闭网络连接等。由于SurfaceView销毁后不再可见,任何在此时渲染到SurfaceView上的内容将不再呈现。
以下是一个示例,展示了如何在surfaceDestroyed方法中释放资源:
```java
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private SurfaceView surfaceView;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 在这里初始化MediaPlayer并开始播放视频
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(holder);
try {
mediaPlayer.setDataSource("path/to/video.mp4");
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 在这里处理SurfaceView大小变化的逻辑
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 在这里释放MediaPlayer资源
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// 如果surfaceDestroyed没有被调用,你也可以在这里释放MediaPlayer资源
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
}
```
在这个示例中,当用户按下Home键时,surfaceDestroyed方法会被自动调用,释放MediaPlayer资源并停止视频播放。当用户再次返回到应用时,surfaceCreated方法会被调用,重新初始化MediaPlayer并恢复视频播放。这样可以确保在应用的生命周期中,视频播放能够正确地停止和恢复。
壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。
我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复