1 - 新建一个类,继承Activity前端
package com.example.activiylife; import android.app.Activity; public class SecondActivity extends Activity{ }
2- 重写Activity中的onCreate方法android
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }
3- 建立布局文件:数据结构
<?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" android:orientation="vertical" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textView"/> </LinearLayout>
4- 在onCreate方法中调用布局文件app
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); }
5- 在主配置文件(AndroidManifest.xml)中注册该Activity函数
在<application>中添加一对<activity>子标签;布局
android:name后面写新增的activit的完整类名this
<activity android:name="com.example.activiylife.SecondActivity" android:label="@string/app_name" > </activity>
至此,就完成、增长了一个全新的activity。code
若是想要看见它的话,咱们还须要改一个地方:xml
在主配置文件中,为这个新activity增长这段内容:对象
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
有这段内容,这个activity就会被做为默认activity,另外,咱们还应该在前一个使用它的地方,把它删除了:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.activiylife.MainActivity" android:label="@string/app_name" > </activity> <activity android:name="com.example.activiylife.SecondActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
这时,启动程序就会默认启动新增的activity:
1- 生成一个意图对象(Intent)
Intent intent = new Intent();
2- 调用setClass方法设置要启动的Activity
//参数为Context类型对象,它是Activity的父类,全部Activity对象能够向上转型为Context对象 //第一个参数是当前activity对象,第二个参数为要启动的activity.class intent.setClass(Context packageContext, Class<?> cls)
3- 调用startActivity方法启动Activity
startActivity(intent);
这样就能实现启动另外一个activity;
下面用一个例子来讲明: 在第一个activity点击按钮启动第二个activity。
第一个activity的按钮监听:
class ButtonListener implements OnClickListener { public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent); } }
同时将默认activity设置为第一个activity:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.activiylife.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.activiylife.SecondActivity" android:label="SecondActivity" > </activity> </application>
启动程序:
点击按钮来到secondeactivity:
栈:一种先进后出的数据结构
用在activity上面的意思就是:
第一个activity在栈的最底层; 第二个activity在栈的倒数第二层; ... 最新的activity在栈的最上面,显示在手机屏幕上;
点击返回的时候,是返回到前一个activity,五、四、三、二、1这样一直返回到栈最底层的activity。
Activity从建立到销毁这就是一个生命周期,在这个过程当中的不一样阶段要作不一样的事。 具体处于什么阶段,这个由系统来控制,但具体阶段所作的事,能够根据需求来实现。
这些函数由系统自动调用; 何时调用是由系统决定的,但函数内容是咱们能够根据需求来定制。
为了初步了解这些函数的调用时机,咱们经过一个例子来讲明。
在这个例子中,咱们一共须要两个activity,实现从界面1点击按钮能进入界面2。
同时在两个activity中,都重写这个7个函数,打印输出语句。
第一个activity的按钮监听器:
class ButtonOnClickListener implements OnClickListener { public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent); } }
除onCreate外,另外的6个方法,两边activity都要重写: (记得在onCreate方法中 写一行打印语句)
protected void onDestroy() { super.onDestroy(); System.out.println("----onDestroy----"); } protected void onPause() { super.onPause(); System.out.println("----onPause----"); } protected void onRestart() { super.onRestart(); System.out.println("----onRestart----"); } protected void onResume() { super.onResume(); System.out.println("----onResume----"); } protected void onStart() { super.onStart(); System.out.println("----onStart----"); } protected void onStop() { super.onStop(); System.out.println("----onStop----"); }
启动APP,进入第一个activity:
执行的函数依次为:
1- onCreate-- Activity对象第一次建立时执行(第一个activity第一次建立)
2- onStart-- 能够看见Activity的时候执行(第一个activity可见)
3- onResume-- 当Activity能够与用户交互时调用(第一个activity可交互)
接着咱们打开第二个activity:
函数执行顺序:
1- onPause-- 即将启动另一个activity时执行。(这里要启动第二个activity了,因此第一个activity执行了onPause方法)
2- onCreate-- activity对象第一次被建立时执行(第二个activity是第一次启动,因此要执行onCreate)
3- onStart-- 当actvitiy可见时被执行 (第二个activity可见)
4- onResume-- 当activity能够进行交互时执行 (第二个activity可交互)
5- onStop-- 当activity不可见时执行 (第一个activity不可见)
接着咱们点击返回:
执行顺序:
1- onPause-- 即将启动另一个activity时执行(要启动第一个activity,因此第二个activity执行onPause)
2- onRestart-- 当一个Activity再次启动以前执行(第一个activity在以前已经被启动过了,因此这里执行onRestart)
3- onStart-- activity可见时执行(第一个activity可见)
4- onResume-- activity可交互时执行(第一个activity可交互)
5- onStop-- activity不可见时执行(第二个activity不可见)
6- onDestroy-- 当前activity被销毁以前执行(第二个activity被销毁)
以上,咱们就能够了解到一个activity的生命周期是什么样的。
Activity-A第一次启动时执行:onCreate\onStart\onResume
启动其余Activity前,Activity-A会执行onPause
在其余Activity启动好,同时看不见Activity-A的时候,Activity-A会执行onStop
从新回到Activity-A的时候,Activity-A会执行:onRestart\onStart\onResume
当关闭Activity-A的时候,Activity-A会执行:onStop/onDestroy.
状态
Resumed : Activity对象处于运行状态
Paused : 另外一个Activity位于前端,但本Activity还可见
Stopped : 另外一个Activity位于前端,彻底遮蔽本Activity
注意:
Activity生命周期图
onCreate和onDestroy一对
onPause和onResume一对
onStop和onStart一对
onRestart暂时一我的。
onCreate-买车 onDestroy-报废
onStart-点火启动 onStop-熄火
onResume-踩油门前进 onPause-松开油门(刹车)