活动是一种可以包含用户界面的组件,主要用于和用户进行交互,一个应用程序中可以包含一个或多个活动。但只有一个主活动,主活动可以跳转到其他活动。
1. 创建活动
- 手动创建
- 利用AS创建
2. 活动注册
<activity android:name=".FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
3. 销毁活动
Activity类提供了一个Finish方法,调用该方法可以销毁当前活动,效果和点击Back键相同。
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this,"you clicked button1", Toast.LENGTH_SHORT).show();
finish();
}
});
4. Intent
Intent是Android程序中各组件之间进行交会的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
- 启动活动
- 启动服务
- 发送广播场景
1.显式Intent
//FirstActivity.java
package com.example.activitydemo;
// 这里省略import语句
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
};
Intent构造函数,
Intent(Context packageContext, class<?>cls)
第一个参数Context要求提供一个启动活动的上下文,第二个参数class指定想要启动的目标活动,通过这个构造函数就可以构建出Intent的”意图”,通过startActivity
启动这个意图。
2.隐式Intent
通过intent-filter
来实现
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activitydemo">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name2"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="test"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="my_category"></category>
</intent-filter>
</activity>
<activity android:name=".FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
//FirstActivity.java
package com.example.activitydemo;
// 这里省略import语句
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("test");
// 添加category
intent.addCategory("my_category");
startActivity(intent);
}
});
}
};
每个intent只能有一个action,但是可以有多个category,通过addCategory可以添加category。
3.Intent传递数据
向下一个action传递数据
//Intent 缓存数据
Intent intent = new Intent(FirstActivity.this,SecondActivity.class)
String data = "Hello Second";
intent.putExtra("extra_data", data);
// 获取Intent缓存的数据
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
启动活动时传递数据很简单,Intent中提供了一系列
putExtra
方法的重载,可以把需要传递的数据缓存在Intent中。启动另一个活动后,再从Intent中取出数据。
向上一个action传递数据
- startActivityForResult开启下一个活动
- setResult传递数据
- 重写onActivityResult方法
5. 活动的生命周期
1.栈
Android通过栈来管理活动,开启或销毁一个活动就会触发进栈和出栈。
2.活动状态
运行状态**
当一个活动位于返回栈的栈顶时,这时活动就处于运行状态。
暂停状态
活动不处于栈顶,但可见。
停止状态
活动不位于栈顶,不可见。
销毁状态
活动从返回栈中移除后就处于销毁状态。
3. 活动的生存期
- onCreate():活动在第一次被创建的时候调用,应该在该方法中完成活动的初始化操作,比如加载布局,绑定事件等。
- onStart(): 活动由不可见变为可见的时候调用。
- onResume():这个方法在活动准备好和用户进行交互的时候调用,此时活动一定位于返回栈的栈顶,并且处于运行状态。
- onPause():系统准备去启动或者恢复另一个活动的时候调用。
- onStop():这个方法在活动完全不可见的时候调用。
- onDestory():这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
- onRestart(): 活动由停止状态变为运行状态之前调用。