什么是Activity,简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中制定一个主Activity,如
下设置
<activity
android:name=".ActionViewTest"
android:label="@string/title_activity_action_view_test">
<!-- android:name=".ActionViewTest表示整个应用程序的主程序的名称
<intent-filter>意图过滤器:用于过滤用户的一些动作和操作
"android.intent.action.MAIN"表示当前程序是否在程序是整个工程的入口程序
category android:name表示决定应用程序是否在程序列表中显示-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
当程序第一次运行时用户就会看这个Activity,这个Activity可以通过启动其他的Activity进行相关的操作。
当启动其他的Activity时这个当前的这个Activity将会停止,新的Activity将会停止,新的Activity将会压入栈中,同时获取 用户焦点,这是就可在这个Activity上操作了。
我们都知道栈是先进后出的原则,那么当用户按Back键时,当前的这个Activity销毁,前一个Activity重新恢复。
我们来看看Activity生命周期的7个方法和3个阶段
7个方法如下:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onPause()
void onStop()
void onDestroy()
Activity的三个阶段:
开始Activity:在这个阶段依次执行3个生命周期的方法,分别是onCreare,onStart,onResume方法。
Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个生命周期,分别是onRestart,onStart,onResume
关闭Activity,当Activity被关闭是系统会依次执行3个生命周期,分别是onPause,onStoo,onDestroy
从上图可以看出有两层循环,第一层是焦点的获得与失去循环,onResume()->onPause->onResume()。
第二层是可视与不可视的循环,onStart->onResume->onPause->onStop->onRestart。
具体周期如下:
整个生命周期:onCreat->onDestroy
焦点生命周期:onResume->onPause
可视生命周期:onStart->onStop()
示例源代码如下:
package com.example.lifedemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate is execute");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "onStart is execute");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "onResume is execute");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "onPause is execute");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "onStop is execute");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "onDestroy is execute");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, "onRestart is execute");
}
}
首先运行程序
运行onCreat->onStart->onResume获得焦点
然后模拟打电话onPause->onStop失去焦点//在两个步骤之间执行第二个Avtivity的onCreate onStart onResume
同时注意只有第一个Activity被全部遮盖才会调用onStop,如果只是调用了一个对话框是不会没有全部遮盖就不会调用onStop了。
然后推出打电话状态onRestart->onStart->onResume重新获得焦点//开始第二个Activity先执行onPause,在最后会执行第二个Activity的onStop onDestory
最后back键onPause->onStop->onDestroy程序结束
onDestory在执行了finish()或系统资源不够用是会被调用。