您的位置:首页 > 移动开发 > Android开发

Android四大组件之Activity<上>

2017-03-09 09:59 357 查看
Android 四大组件:Activity,BroadcastReceiver,Service,Content Provider。

现在先了解Activity。本节内容主要有:

生命周期

启动方式

之间传值

- 生命周期

来一张最经典的Activity的生命周期图:



可以看到生命周期的几个步骤:

onCreate—onStart—onResume()—onPause—onStop—onDestroy—onRestart.

文字梳理下:正确启动一个Activity,首先执行onCreate,接着onStart,接着onResume,到此你就可以看到ui了。当前Activity被其他Activity覆盖掉,被切换到后台,这时执行onPause,接着执行onStop,此时在后台不可见,不会立即进行销毁即onDestroy,如果其他app运行起来不够内存,则会把切换到后台的Activity进行回收,被杀。如果运行内存足够,用户再次把切换到后台的Activity切换到前台,则走onRestart—onStart—onResume路线。

下面代码演示两个Activity之间的切换以及按home键,按返回键退出应用时的生命周期。

1.两个Activity切换的生命周期。

FirstActivity代码如下:

public class FirstActivity extends Activity {

private TextView mFirstTv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("LWS", "FirstActivity执行onCreate方法!!!");
setContentView(R.layout.activity_first);
initViews();
}

/**
* 初始化组件
*/
private void initViews(){
mFirstTv=(TextView) findViewById(R.id.tv_first);
mFirstTv.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(FirstActivity.this,SecondActivity.class));
}
});
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.d("LWS", "FirstActivity执行onStart方法!!!");
}

@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d("LWS", "FirstActivity执行onRestart方法!!!");
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.d("LWS", "FirstActivity执行onResume方法!!!");
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.d("LWS", "FirstActivity执行onPause方法!!!");
}

@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.d("LWS", "FirstActivity执行onStop方法!!!");
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("LWS", "FirstActivity执行onDestroy方法!!!");
}

}


SecondActivity代码如下:

public class SecondActivity extends Activity {

private TextView mSeconTv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("LWS", "SecondActivity执行onCreate方法!!!");
setContentView(R.layout.activity_second);
initViews();
}

/**
* 初始化组件
*/
private void initViews() {
mSeconTv = (TextView) findViewById(R.id.tv_second);
mSeconTv.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(SecondActivity.this,
FirstActivity.class));
}
});
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.d("LWS", "SecondActivity执行onStart方法!!!");
}

@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d("LWS", "SecondActivity执行onRestart方法!!!");
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.d("LWS", "SecondActivity执行onResume方法!!!");
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.d("LWS", "SecondActivity执行onPause方法!!!");
}

@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.d("LWS", "SecondActivity执行onStop方法!!!");
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("LWS", "SecondActivity执行onDestroy方法!!!");
}
}


首先启动app,显示的是FirstActivity.

打印顺序如下:



点击跳转到SecondActivity.猜想顺序如下,FirstActivity.onPause—

SecondActivity.onCreate—SecondActivity.onStart—SecondActivity.onResume–FirstActivity.onStop.

看看打印log,是不是这样?

如下:



没问题,FirstActivity不可见执行onStop.

接下来,再次点击跳转到FirstActivity.

顺序应该是:SeconActivity.onPause—Firstactivity.onCreate—Firstactivity.onStart–Firstactivity.onResume—SeconActivity.onStop

log如下:



2.按Home键的生命周期

那就是当前Activity切换到后台再切到当前可见,走onPause–onStop.接着走onRestart–onStart–onResume.

如图:



3.按返回键的生命周期和它的启动模式有关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: