activity和surfaceView、LSurfaceView周期相关操作

本文详细解析了Android中Activity及SurfaceView、GLSurfaceView的生命周期。包括Activity的各种状态转换、SurfaceView和GLSurfaceView的创建与销毁过程,以及在不同场景下(如home键、锁屏、来电等)这些组件的行为特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activity和surfaceView、LSurfaceView周期相关操作:


activity开始:onCreate->onStart->onResume;
home键,锁屏,来电:onPause->onStop;
唤醒(重home键,来电后,解锁):onRestart->onStart->onResume;




activity跳转:(a_1->a_2):
a_1_onPause->a_2_onCreate->a_2_onStart->a_2_onResume->a_1_onStop;
在a_2里有home键,锁屏,来电操作,则发生的响应和a_1一样;
退格后:a_2_onPause->a_1_onRestart->a_1_onStart->a_1_onResume->a_2_onStop->a_2_onDestroy;
注意:如果a_2中有变量,onDestroy后变量也会随之消失。如果再回到a_2,变量都回到初始化状态;




surfaceView和GLSurfaceView的相关操作:
surfaceView:创建过程:
surfaceViewCreate->surfaceChange;home键,锁屏,来电不会对surfaceView造成影响,当activity onDestroy触发前会触发surfaceViewDestroyed;
注意:如果有绘图线程:按home键,锁屏,来电,onDestroy,都不会对线程造成影响,所以记得对线程进行控制(切记!!!!);


GLSurfaceView:


创建过程和surfaceView一样,但注意:
按home键,来电,onDestroy,会调用:surfaceDestroyed方法,onDrawFrame停止运行,home键,来电后唤醒会连续调用两次onSurfaceChanged方法。
锁屏不会调用surfaceDestroyed,onDrawFrame照样运行,所以记得:glSurfaceView.onResume()和glSurfaceView.onPause();来保证程序的正常运行;


线程停止的正确方法:
 private class RunThread extends Thread{
  private boolean ifRunning=true;
  @Override
public void run() {
     while(ifRunning){
     try {
Thread.sleep(500);
if(!ifPause){
LOG.trace("surface view run");
}

} catch (InterruptedException e) {
e.printStackTrace();
}
     }
 }//run
 @Override
 public void interrupt() {
   ifRunning=false;
super.interrupt();
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值