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();
}
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();
}