2-1. 活动(Activity)
1.概述活动
1-1.活动是什么
是一种可以包含用户界面的组件,主要用于和用户进行交互。
1-2.Activity的四种状态

1-3.Activity的生命周期

1-3-1.详解
- onCreate()
第一次被创建时调用
- onStart()
活动由不可见变为可见时调用
- onResume()
活动准备好与用户进行交互时调用(活动位于栈顶,处于运行状态)
- onPause()
系统准备启动或者恢复另一个活动的时候调用
- onStop()
活动完全不可见的时候调用
- onDestory()
活动被销毁之前调用(之后的活动为销毁状态)
- onRestart()
活动由停止状态重新变为启动状态使用
1-3-2.测试代码
package com.example.fristapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
// 创建--- 运行状态 (界面打开)
// 创建
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("Activity生命周期","onCreate()方法调用");
}
// 可见时调用
@Override
protected void onStart( ) {
super.onStart();
Log.i("Activity生命周期","onStart()方法调用");
}
// 交互时调用
@Override
protected void onResume( ) {
super.onResume();
Log.i("Activity生命周期","onResume()方法调用");
}
// 运行---暂停---销毁 (界面关闭)
// 启动或者恢复另一个活动使用
@Override
protected void onPause( ) {
super.onPause();
Log.i("Activity生命周期","onPause()方法调用");
}
//完全不可见的调用
@Override
protected void onStop( ) {
super.onStop();
Log.i("Activity生命周期","onStop()方法调用");
}
// 销毁
@Override
protected void onDestroy( ) {
super.onDestroy();
Log.i("Activity生命周期","onDestroy()方法调用");
}
}
1-3-3.返回栈
安卓是使用任务(Task)管理活动,一个任务就是一组存放在栈里的活动的集合,这个栈被称为返回栈(back Task);每启动一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。当按下Back键或者finish()方法去销毁一个活动,它的返回栈会入栈处于栈顶的位置。
2.创建和配置Activity
2-1.创建Activity
2-1-1.创建继承自Activity的activity
- 创建java类
./app/src/main/java/com.example.
packageName/className
//fristapp为包名 DetailActivity 为类名
package com.example.fristapp;
public class DetailActivity {
}
- 创建继承Activity
package com.example.fristapp;
import android.app.Activity;
public class DetailActivity extends Activity {
}
2-1-2.重写需要的回调方法
- onCreate()
ctrl+o 打开方法框 -> 选择onCreate()
...
public class DetailActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
2-1-3.设置要显示的视图
- setContentView()
...
public class DetailActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //设置布局
}
}
2-2.配置Activity
- AndroidManifest.xml (配置文件)
activity 标签配置活动; package属性写对应的配置包名称;android:name属性写对应的类名称,通过“.ClassName”的方法获取
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fristapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.FristApp">
...
<activity android:name=".DetailActivity"
android:label="详细"/>
</application>
</manifest>
- layout创建活动
./app/src/main/java/com.example.
packageName右击->(new->activity->Gallery)
3.启动和关闭Activity
使用intent从主活动跳转到其他活动
3-1.使用显示intent
启动activity
- 创建activity
- 设置活动视图
- 获取按钮添加setOnClickListener()事件
- 创建intent
- 触发intent后 启动活动(startActivity)
...
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //创建活动
setContentView(R.layout.activity_main2); //设置活动视图
Button button=(Button) findViewById(R.id.Btn1); //通过id获取按钮
button.setOnClickListener(new View.OnClickListener() { //设置按钮点击事件
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity2.this,MainActivity.class); //创建intent
startActivity(intent); //启动活动
}
});
}
}
关闭activity
按下Back键或者finish()销毁activity
...
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish(); //关闭活动
}
});
}
}
当两个活动都使用了finish(),会关闭界面
3-2.使用隐式intent
通过action和category等信息,然后交由系统去分析这个Intent,并帮我们找到合适的活动去启动。
- 在
AndroidManifest.xml中通过标签配置
...
<activity
android:name=".MainActivity"
android:exported="false">
<intent-filter>
<action android:name="com.example.project1.ACTION_START1"/> <!-- 设置默认打开的活动 -->
<category android:name="android.intent.category.DEFAULT"/> <!--指定当前活动能够响应action-->
</intent-filter>
</activity>
- 在
MainActivity(活动)中创建intent
Intent intent=new Intent("com.example.project1.ACTION_START1");写入对应配置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
Button button=(Button) findViewById(R.id.Btn3); //通过id获取按钮
button.setOnClickListener(new View.OnClickListener() { //设置按钮点击事件
@Override
public void onClick(View v) {
Intent intent=new Intent("com.example.project1.ACTION_START1"); //使用隐式转换,intent("转换对应地址")
startActivity(intent); //启动活动
}
});
}
3-3.更多隐式intent的使用方法
可以启动其他程序的活动,使Android多个应用程序共享成为可能
3-3-1.url跳转
使用setData()方法解析url;使用
Intent.ACTION_VIEW系统内置intent
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_VIEW); //使用系统内置intent
intent.setData((Uri) Uri.parse("https://www.cnblogs.com/mywifeisMsHu/p/15936251.html"));
startActivity(intent);
}
});
}
3-3-2.调用系统拨号界面
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_DIAL); //系统内置intent
intent.setData((Uri) Uri.parse("tel:10086"));
startActivity(intent);
}
});
}
4.Activity的一些技巧
4-1.刷新Activity
onCreate(null);
4-2.创建Tost
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity3.this, "您点击了该按钮", Toast.LENGTH_SHORT).show();
}
});


浙公网安备 33010602011771号