以下均转自Android游戏编程入门经典,转载请标明出处
上次提到Android游戏编程我们需要了解一些API:窗口管理、输入、文件IO、音频、图形
为了能在一个项目里测试这些API,我创建了一个ListActivity,代码如下
package org.example.ch04_android_basics;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class AndroidBasicsStarter extends ListActivity {
String tests[] = {"LifeCycleTest", "SingleTouchTest", "MultiTouchTest",
"KeyTest", "AccelerometerTest", "OrientationTest", "AssetsTest",
"ExternalStorageTest", "SoundPoolTest", "MediaPlayerTest",
"FullScreenTest", "RenderViewTest", "ShapeTest", "BitmapTest",
"FontTest", "SurfaceViewTest"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, tests));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
String testName = tests[position];
try{
Class clazz = Class
.forName("org.example.ch04_android_basics." + testName);
Intent intent = new Intent(this, clazz);
startActivity(intent);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
tests数组里面有关于窗口管理、输入、文件IO、音频、图形相应的API的所有Activity名字,在AndroidBasicsStarter类中点击相应的Item就测试相应名字的Activity,运行效果如下
接下来就该创建测试活动了,一个活动包含一些受保护的方法,我们可重写它们已获知状态的变化:
Activity.onCreate():当活动第一次创建时调用该方法。在这里,我们设置所有的UI组建并挂载到输入系统中。它在生命周期中只会被调用一次。
Activity.onRestart():当活动从停止状态恢复时调用该方法,onStop()方法先于它被调用。
Activity.onStart():当onCreate()方法被调用之后或者活动从停止状态恢复时调用该方法。在后一种情况下,onRestart()方法先于它被调用。
Activity.onResume():当onStart()方法被调用之后或者活动从暂停状态恢复时调用该方法(例如,屏幕解除锁定时)。
Activity.onPause():当活动进入暂停状态时调用该方法。这也许是我们最后接收的通知,因为Android系统可能会决定不进行通知就直接删除我们的应用程序。我们应该在该方法内保存所有需要持久存储的状态。
Activity.onStop():当活动进入停止状态时调用该方法,onPause()方法先于它被调用。这就意味着一个活动在停止之前,它会暂停。与onPause()方法相同,它应该是Android系统直接删除活动之前我们最后得到的通知。在这里,我们也可保存一些持久状态。不过,系统有可能不调用该方法而删除活动。由于onPause()方法先于onStop()方法在活动被直接删除前被调用,因此应该在onPause()方法内保存所有内容.
Activity.onDestory():当活动被彻底销毁时,在活动生命周期的最后调用该方法。这是持久保存任何信息的最后机会,用于在下次创建活动时恢复信息。注意,当活动在系统调用onPause()或onStop()方法后被销毁时是不会调用该方法的。
Android生命周期如下图:
package org.example.ch04_android_basics;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class LifeCycleTest extends Activity {
StringBuilder builder = new StringBuilder();
TextView textView;
private void log(String text){
Log.d("LifeCycleTest", text);
builder.append(text);
builder.append('\n');
textView.setText(builder);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
textView = new TextView(this);
textView.setText(builder);
setContentView(textView);
log("created");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
log("paused");
if(isFinishing()){
log("finishing");
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
log("resumed");
}
}
运行效果: