主要なファイルはMainActivity.javaとTestSurfaceView.java
MainActivity.java(抜粋)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TestTools.log("MainActivity: onCreate");
setContentView(R.layout.activity_main);
FrameLayout container = (FrameLayout)findViewById(R.id.container);
container.addView(new TestSurfaceView(this));
}
@Override
protected void onResume() {
super.onResume();
TestTools.log("MainActivity: onResume");
}
@Override
protected void onStart() {
super.onStart();
TestTools.log("MainActivity: onStart");
}
@Override
protected void onStop() {
super.onStop();
TestTools.log("MainActivity: onStop");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
TestTools.log("MainActivity: onCreateOptionsMenu");
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
TestTools.log("MainActivity: onDestroy");
}
@Override
protected void onPause() {
super.onPause();
TestTools.log("MainActivity: onPause");
}
}
TestSurfaceView.java(抜粋)
public class TestSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
public TestSurfaceView(Context context) {
super(context);
TestTools.log("TestSuefaceView: TestSuefaceView()");
SurfaceHolder sh = getHolder();
sh.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
TestTools.log("TestSuefaceView: surfaceChanged");
TestTools.log("Width: " + width + ", Height: " + height);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
TestTools.log("TestSuefaceView: surfaceCreated");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
TestTools.log("TestSuefaceView: surfaceDestroyed");
}
}
実験環境
SDK: Android 4.2.2 (API LEVEL 17)
実験機器: Nexus7(2012)
結果
初回起動時
MainActivity: onCreate TestSuefaceView: TestSuefaceView() MainActivity: onStart MainActivity: onResume TestSuefaceView: surfaceCreated TestSuefaceView: surfaceChanged Width: 1238, Height: 586 MainActivity: onCreateOptionsMenu
画面切り替え時
MainActivity: onPause TestSuefaceView: surfaceDestroyed MainActivity: onStop
画面復帰時
MainActivity: onStart MainActivity: onResume TestSuefaceView: surfaceCreated TestSuefaceView: surfaceChanged Width: 1238, Height: 586
画面回転時
MainActivity: onPause MainActivity: onStop MainActivity: onDestroy TestSuefaceView: surfaceDestroyed MainActivity: onCreate TestSuefaceView: TestSuefaceView() MainActivity: onStart MainActivity: onResume TestSuefaceView: surfaceCreated TestSuefaceView: surfaceChanged Width: 758, Height: 1055 MainActivity: onCreateOptionsMenu
surfaceCreatedとsurfaceChangedは、毎回一緒に呼ばれるようだ。そして、画面切り替え時や回転時は、必ずsurfaceDestroyedが呼ばれる。surfaceChangedは毎回呼ばれるから、こっちで初期化処理をやってもいいのかな?
今回使ったEclipseプロジェクトファイルはこちら
SurfaceViewLaunchTest.zip
0 件のコメント:
コメントを投稿