Android应用开发(二):Activity生命周期剖析以及如何启动新的Activity或网页
本文讲述组件Activity的相关知识,主要包括如何启动一个Activity、如何打开一个网页,最后解析Activity的生命周期相关知识。
1、如何启动一个Activity
(1)、新建一个Activity
要启动一个新的Activity,就必须先创建一个新的Activity,Android Studio可以直接创建Activity而不需要一行一行的敲代码,这就是前面所说的采用Android Studio平台的好处之一。
具体代码如下:
package edu.fred.hqu.androidactivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class AnotherAty extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another_aty);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_another_aty, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Android Studio的好处还在于,Android Studio可以在layout和AndroidManifest.xml中将新建的Activity所需要的代码自动生成,如下图所示:
(2)、加入Button
然后,我们在activity_main.xml中加入一个Button,旨在点击该按键可以进入另一个Activity,代码如下:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击启动一个界面"
android:id="@+id/btnStartAnotherAty1"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
(3)、修改MainActivity.java
接着,在MainActivity.java中加入如下代码:
/*启动另一个Activity*/
findViewById(R.id.btnStartAnotherAty1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, AnotherAty.class));//启动另一个Activity
}
});
(4)、编译运行
最后编译运行,结果如下图所示:
2、如何打开一个网页
打开网页很简单,直接在MainActivity.java中加入如下代码:
/*启动另一个网页*/
findViewById(R.id.btnStartAnotherAty2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.****.net/frd2009041510")));//启动另一个网页
}
});
为了观察效果,可以像之前一样加一个按键,最后给出效果图
3、Activity的生命周期
生命周期示意图如下:
接下来,我们加入代码验证该图,加入的代码如下:
/*Activity生命周期*/
@Override
protected void onStart() {
super.onStart();
System.out.println("A onStart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("A onResume");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("A onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("A onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("A onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("A onRestart");
}
在另一个Activity中加入代码如下:
/*Activity生命周期*/
@Override
protected void onStart() {
super.onStart();
System.out.println("B onStart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("B onResume");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("B onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("B onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("B onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("B onRestart");
}
最后运行,查看运行日志验证结果,下面给出开始运行的一部分结果截图,执行的步骤是进入Activity,点击启动另一个Activity,结果如下图:
实验结果分析:主Activity首先启动,即A onCreate、A onStart、A onResume,点击启动另一个新的Activity后A onPause,接着B onCreate、B onStart、B onResume,最后A onStop,可以看出完全符合Activity周期图。