此博客为学习安卓开发的笔记型博客,若有不妥或补充之处希望各位大神给予指正
- 活动
- 活动的基本用法
- 创建活动
- 创建布局
- 使用布局
- 注册活动
- 使用Toast
- 在活动中使用Menu
- 销毁活动
- intent
- 显示声明intent:
- 隐式声明intent:
- 向下一个活动传递数据·:
- 返回数据给上一个活动
- 活动的生命周期
- 活动状态
- 活动的生存期
- 活动的启动模式
活动
一种包含用户界面的组件
活动的基本用法
创建活动
创建活动后,会自动生成oncreate方法,我们可以重写此方法。
创建布局
在res的layout文件夹中创建新的布局:xxx_layout.xml文件
使用布局
在活动中的oncreate方法中调用 setContentView(R.layout.xxx_layout);声明该活动使用什么布局
注册活动
在配置文件AndroidManifest.xml中我们可以注册活动,一般我们新建活动时,IDE会帮助我们注册。
<activity android:name=".FirstActivity">
android:label="This is FirstActivity"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
其中:<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
声明该活动为默认启动项。
使用Toast
Toast类似于alert
Toast.makeText(FirstActivity.this,"You click the button: 点我",Toast.LENGTH_SHORT).show();
//三个参数:上下文,显示的文本,显示的时长
在活动中使用Menu
在res/menu文件夹下新建menu: xxx_menu.xml
在menu中添加item:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_main_item_add"
android:title="Add"
/>
<item
android:id="@+id/menu_main_item_Remove"
android:title="Remove"
/>
</menu>
在方法中重写onCreateOptionsMenu方法:
重写方法的快捷键为:ctrl+O
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
//两个参数:第一个参数指定通过哪个资源文件创建菜单,第二个参数指定菜单项传给哪一个Menu对象,这里指定onCreateOptionMenu()方法中传入的参数
return true;//return true 菜单将显示出来,return false菜单将无法显示
}
销毁活动
finish()方法,或者通过点击手机自带的back键
当然点击back键会调用该活动中的onBackPressed()方法,该方法中含有finish()方法,本质还是调用了finish()
intent
使用intent启动其他的活动并可以传递数据。
显示声明intent:
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
//显式声明intend:传入两个参数:第一个参数为执行启动活动事务的上下文,第二个是想要启动的目标活动
// 启动新的活动:
startActivity(intent);
隐式声明intent:
Intent intent=new Intent("com.example.activitytest.ACTION_START");
//隐式声明intend:传入一个参数:需要被执行的action,表明我们想要启动能够相应这个action的活动
//一个intend只能指定一个action,但却能指定多个category
intent.addCategory("com.example.activitytest.MY_CATEGORY");
//使用隐式intend,我们不仅可以启动自己程序内的活动,还可以启动其他程序内的活动:
//例如打开浏览器的一个界面
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
是不是完全不知道上面说的action和category是神马,来我们现在填坑:
在配置文件中找到注册的活动:
<activity android:name=".SecondActivity"></activity>
现在我们添加如下代码来声明该活动可以完成的acton和category
<intent-filter>
<action android:name="这里为action名称,可以是官方给的也可以是自己写的"/>
<category android:name="category名称,可以是官方给的也可以是自己写的"/>
</intent-filter>
action和category的区别:
在隐式声明intent中,action只要有一个匹配上就可以启动该活动,
但category则需要全部匹配才可以启动活动
向下一个活动传递数据·:
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
//显式声明intend:传入两个参数:第一个参数为执行启动活动事务的上下文,第二个是想要启动的目标活动
intent.putExtra("extra_string","hello second activity");
//通过intent 传递数据,使用putExtra方法将数据放入intent中,传递两个参数,第一个为键,第二个为值
然后我们重写目标活动的onCreate方法:
final Intent intent=getIntent();
//获取启动它的intent
String data=intent.getStringExtra("extra_string");
Log.d(TAG, data);
可以看出传递成功了:
D/SecondActivity: hello second activity
返回数据给上一个活动
startActivityForResult(intent,1); //启动一个活动,并在该活动销毁时能够返回一个结果给上一个活动
//第二个参数为请求码,用于在之后回调onActivityResult方法中判断数据来源
//比如能够启动多个活动,用请求码来判断区分回调的是哪一个活动
在secondActivity中添加按钮并添加响应事件:
按下此按钮后会销毁secondActivity并返回数据
public void onClick(View v) {
Intent intent1=new Intent();
intent1.putExtra("second_extra_string","hello first activity");
setResult(RESULT_OK,intent1);//专门用于向上一个活动返回数据
//第一个参数用于向上一个活动返回处理结果,一般为RESULT_OK 或 RESULT_CANCELED ,第二个参数传递带有数据的intent
finish();
}
启动的活动销毁时,会回调上一个活动的onActivityResult方法:
//第一个参数:请求码;第二个参数:处理结果;第三个参数:带有数据的intent
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
Log.d(TAG, data.getStringExtra("second_extra_string"));
}
}
活动的生命周期
安卓中的活动是可以层叠的,每启动一个新的活动,就会覆盖在原活动之上。销毁一个活动后,下面的活动会重新显示出来。
活动是通过栈来存储的。这个栈也被称为返回栈。

活动状态
每个活动在其生命周期中最多有四种状态:
运行状态
当活动处于栈顶时,该活动就处于运行状态
暂停状态
不在栈顶,但仍然可见(不是所有活动都能充满整个屏幕)
停止状态
不在栈顶,且完全不可见时
销毁状态
从栈中移除
活动的生存期
Activity类中定义了7种回调方法,覆盖了活动生命周期的每一个环节:
onCreate():
第一次被创建时调用,完成活动的初始化操作,比如加载布局,绑定事件等。
onStart():
在活动由不可见变为可见时使用
onResume():
在活动准备好和用户交互时调用,此时活动一定处于运行状态
onPuase():
在系统准备启动或恢复另一个活动时调用
onStop():
在活动不可见时调用
onDestory():
被销毁之前调用
onRestart():
在活动由停止变为运行状态之前调用。

活动的启动模式
启动模式一共有4种:standard、singleTop、singleTask、singleInstance。
我们可以在AndroidManifest.xml文件中通过给<activity 标签指定 android:launchMode来选择启动模式。
standard:
默认的启动模式,每次启动一个活动,都会新建一个活动实例放到栈顶。
singleTop:
当系统发现要启动的活动已经在栈顶,则不会新建活动。但若栈中存在该活动但不在栈顶时,仍会新建新活动实例。
singleTask:
保证每个活动只有一个实例,在新建活动时,若系统检测到返回栈中已有这个活动的实例,则不会新建活动。而是会将这个活动之上的所有活动全部出栈,使得该活动位于栈顶。
singleInstance:
指定为singleInstance的活动会启用一个新的返回栈来管理这个活动。可以做到多个程序共享一个活动实例。
这篇博客详细介绍了安卓开发中的Activity基础知识,包括创建、布局使用、注册、销毁活动,以及Intent的使用、活动生命周期、启动模式。文中还涉及到如何在活动中使用Toast和Menu,以及数据的传递和回传。此外,解释了活动状态和生命周期中的各个回调方法,最后讨论了四种启动模式的特性。

4660

被折叠的 条评论
为什么被折叠?



