纸上得来终觉浅,绝知此事要躬行 --陆游
问渠那得清如许,为有源头活水来 --朱熹
一、任务栈Task
Android使用任务(Task)来管理Activity的,一个任务(Task)就是存放一组Activity的集合,通过栈的形式来管理Activity。
每当我们启动一个新的Activity时,就会将之前存在的Activity压入栈中;每当用户单击Back键或者finish()时会出栈,将之前的Activity呈现在用户面前。
二、Activity的生命周期
(1)onCreate() 活动第一次创建时被调用
(2)onStart() 活动由不可见变为可见时调用
(3)onResume() 这个方法在活动准备好和用户进行交互时进行调用,此时Activity位于任务栈的栈顶,并且处于运行状态
(4)onRestart() 这个方法在Activity由停止状态变为运行状态前调用,也就是活动被重新启东了。
(5)onPause()这个方法在系统去启动或者恢复另外一个Activity的时候调用。这个方法会将CPU的一些资源释放掉,以及保存一些关键数据
(6)onStop()这个方法在Activity完全不可见的时候进行调用。
(7)onDestory()这个方法在Activity被销毁之前调用,将Activity由活动状态变为销毁状态。
Activity的活动周期图:
实例:
创建MainActivity.java和布局文件
public class MainActivity extends Activity {
Button fristbutton;
Button secondbutton;
Button finishbutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fristbutton=(Button)findViewById(R.id.fristbutton);
secondbutton=(Button)findViewById(R.id.secondbutton);
finishbutton=(Button)findViewById(R.id.finishbutton);
fristbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,FristActivity.class);
startActivity(intent);
}
});
secondbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivitty.class);
startActivity(intent);
}
});
finishbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Log.i("info","onCreate");
}
@Override
public void onStart()
{
super.onStart();
Log.i("info", "onStart");
}
@Override
public void onResume()
{
super.onResume();
Log.i("info","onResume");
}
@Override
public void onRestart()
{
super.onRestart();
Log.i("info","onRestart");
}
@Override
public void onPause()
{
super.onPause();
Log.i("info","onPause");
}
@Override
public void onDestroy()
{
super.onDestroy();
Log.i("info","onDestory");
}
@Override
public void onStop()
{
super.onStop();
Log.i("info","onStop");
}
}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/fristbutton"
android:text="FristActivity"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/secondbutton"
android:text="SecondActivity"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/finishbutton"
android:text="Finish"
/>
</LinearLayout>
效果图:
创建FristActivity.java以及布局文件
public class FristActivity extends Activity {
@Override
public void onCreate(Bundle savedinstacestate)
{
super.onCreate(savedinstacestate);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.frist_activity);
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="this is frist_activity"
/>
</LinearLayout>
效果图:
创建SecondActivity.java以及布局文件
public class SecondActivitty extends Activity {
@Override
public void onCreate(Bundle savedinstacestate)
{
super.onCreate(savedinstacestate);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.second_activity);
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="this is the second_activity"
/>
</LinearLayout>
效果图同上
程序启动MainActivity会执行如下几个过程:
当单机按钮时跳转FristActivity页面时,MainActivity此时执行过程如下:
在FristActivity中按Back键返回时,此时MainActivity会执行如下过程:
在MainActivity中单击Finish按钮退出时,MainActivity此时执行如下过程: