续上一篇,继续介绍Android系统。上一篇: 【译】Android系统简介
本文主要介绍构建Android应用的一些主要概念:
Activity
Activity是应用程序中一个单独的有UI的页面(screen),例如:在email应用中,会有一个activity用来显示email的列表,还有activity用来显示具体的email。通常来说,只要有用户交互的应用,就会包含至少一个activity。
一个应用可以包含多个activity,每个activity之间可通过intent进行交互,关于intent会在本文后面进行介绍。
一个activity一般继承自android.app.Activity, 所有的activity都被onXX()方法管理着:
- onCreate() - 设置activity的初始化方法
- onStart() - 当activity变可见的时候会调用此方法;当activity停止并重启后,会再次调用此方法;
- onResume() - 当activity可见,并准备接收和处理用户输入时调用此方法;
- onPause() - 当activity将要失去焦点的时候,会调用此方法;此方法会快速的保存为提交的数据,停止CPU密集计算,为activity进入后台运行而准备;
- onStop() - activity失去焦点,此方法被调用。用来释放应用程序使用的资源;
- onRestart() - 当activity停止后,被再需要的时候,调用此方法;此方法会恢复之前activity的状态;
- onDestroy() - 当activity被注销的时候,调用此方法;代表activity生命周期结束;
activity生命周期:
activity生命周期示例
在strings.xml添加
<string name="CodeProjectWebURL">http://www.codeproject.com</string>
重写activity的这些方法:
public class FirstActivity extends Activity { private WebView oWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); oWebView = (WebView)findViewById(R.id.webView); oWebView.loadUrl(getString(R.string.CodeProjectWebURL)); } /** Called when the activity is about to become visible. */ @Override protected void onStart() { super.onStart(); Toast.makeText(getApplicationContext(), "Inside onStart", Toast.LENGTH_LONG).show(); } /** Called when the activity has become visible. */ @Override protected void onResume() { super.onResume(); Toast.makeText(getApplicationContext(), "Inside onResume", Toast.LENGTH_LONG).show(); } /** Called when another activity is taking focus. */ @Override protected void onPause() { super.onPause(); Toast.makeText(getApplicationContext(), "Inside onPause", Toast.LENGTH_LONG).show(); } /** Called when the activity is no longer visible. */ @Override protected void onStop() { super.onStop(); Toast.makeText(getApplicationContext(), "Inside onStop", Toast.LENGTH_LONG).show(); } /** Called just before the activity is destroyed. */ @Override public void onDestroy() { super.onDestroy(); Toast.makeText(getApplicationContext(), "Inside onDestroy", Toast.LENGTH_LONG).show(); } }
Layout添加WebView控件:
<WebView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/webView" android:layout_alignParentTop="true" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" />
运行效果:
在onCreate()方法调用后,onStart()方法便被调用,通过Toast的消息我们可以看到;
当其他的activity被激活时(比如按home键),当前的activity就会调用onPause()方法,然后onStop()方法立即也被调用;
onResume()被调用的场景:当应用正在运行时,来了个电话,当前应用就会失去焦点(onPause, onStop),电话应用就会获得焦点;当打完电话后,应用又重新获得焦点,这时候onResume()方法被调用;
当activity结束(调用onFinish方法)或者系统为了内存空间临时销毁activity实例的时候,onDestroy()方法被调用。
PS:还是需要把activity, service, content provider, intent, fragement分拆成不同文章,实在是有点长
备注:
1. 本文在翻译过程中有所删减;
2. 关键词汇没有翻译,以免混淆理解;
3. 原文:http://www.codeproject.com/Articles/802449/Article
本文版本历史:
初始版 2014.08.31