1.活动的定义
活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于 和用户进行交互。一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见
2活动的基本用法
手动创建活动选择No Activity
2.1手动创建活动
在project下的app - scr- main- java -下的包里创建 Empty Activity活动,之后活动中对哦那Create()方法进行重写了,其中调用了父类的哦那Create()方法。
2.2创建和加载布局
app/src/main/res中创建新布局
@id/id-name 定义一个id
layout_width 设置宽
layout_heigth 设置高
text 标题
setContentView() 加载布局需要传入id的位置
2.3在 AndroidManifest 文件中注册
配置主活动 在标签的内部加入标签 目的是让活动有先后顺序
action android:name="android.intent.action.MAIN
category android: name="android.intent.category.LAUNCHER"
2.4在活动中使用Toast
Toast 信息通知
在onCreate()方法中添加 Button的代码 findViewById() 获取定义好的元素
setOnClickListener() 按钮监听 按下执行onClick()方法
弹出功能在onClick()方法中实现 makeText().show()显示
makeText中三个参数,1上下文2显示内容
3显示时间 Toast.LENGTH_SHORT 和 Toast.LENGTH_LONG
2.5在活动中使用Menu
res/Directory menu/main menu/Menu resource file
在main.xml中添加
<item
android:id="@+id/add_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
<item>标签就是用来创建具体的某一个菜单项
重写onCreateOptionsMenu方法
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; }
inflate()(资源文件,菜单项)
重写onOptionsItemSelected方法
public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.add_item) { Toast.makeText(this, "You click Add", Toast.LENGTH_SHORT).show();} else if (item.getItemId() == R.id.remove_item) { Toast.makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show(); } return true; } }
2.5销毁活动
按Back或者修改onClick()
public void onClick(View view) { finish(); }
3使用Intent在活动之间穿梭
3.1使用显式Intent
创建新的活动,
如何启动新活动,
Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想 要执行的动作,还可以在不同组件之间传递数据。Intent 一般可被用于启动活动、启动服务以及 发送广播等场景
startActivity()方法,这个方法是专门用于启动活动的
修改onClick方法
创建Intent对象,传入上下文和目标活动两个参数,调用startActivity()方法即可
3.2使用隐式Intent
不明确指出我们想要启动哪一个活动, 而是指定了一系列更为抽象的 action 和 category 等信息
每个 Intent 中只能指定一个 action,但却能指定多个 category
3.3更多隐式Intent的用法
与多个程序之间功能共享
public void onClick(View v)
{ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent); }
Uri.parse()方法 将一个 网址字符串解析成一个 Uri 对象
setData()方法将 Uri 对象传进去
设置<data>标签 更精准的指定当前活动响应数据的类型
android:scheme 用于指定数据的协议部分,如上例中的 http 部分
android:host 用于指定数据的主机名部分,如上例中的 www.baidu.com 部分。
android:port 用于指定数据的端口部分,一般紧随在主机名之后。
android:path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。 android:mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
3.4向下一个活动传递数据
Intent 中提供了一系列 putExtra()方法的重载,可 以把我们想要传递的数据暂存在 Intent 中,启动了另一个活动后,只需要把这些数据再从 Intent 中
putExtra()方法接收两个参数,第一个参数是键,用于后面从 Intent 中 取值,第二个参数才是真正要传递的数据
3.5返回数据给上一个活动
startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是请求码
修改按钮事件
setResult()方法 向上一个活动返回数据的
参数 处理结果,传回Intent
finish()销毁当前活动
onActivityResult()方法
参数 启动活动的请求码 传入处理结果 返回数据的Intent
4活动的生命周期
4.1返回栈
Android 是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集 合,这个栈也被称作返回栈(Back Stack)
4.2活动的状态
运行状态 处于返回栈栈顶的活动
暂停状态 活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态
停止状态 一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态
销毁状态 从返回栈中移除后就变成了销毁状态
4.3活动的周期
onCreate() 方法用于完成活动的初始化操作
onStart() 方法用于活动由不可见变为可见
onResume() 在活动准备好和用户进行交互的时候
onPause() 方法在系统准备去启动或者恢复另一个活动的时候
onStop() 方法在活动完全不可见的时候调用
onDestroy() 调用之后活动的状态将变为销毁状态
onRestart() 重新启动活动
完整生存期 从onCreate()到onDestroy()
可见生存期 从onStart()到onStop()
前台生存期 从onResume()到onPause()
4.4体验活动的生命周期
创建两个活动,实现跳转,运行观察日志
4.5活动被回收了怎么办
当一个活动进入到了停止状态,是有可能被系统回收的
在活动 A 的基础上启动了活动 B,活动 A 就进入了停止状态, 这个时候由于系统内存不足,将活动 A 回收掉了,然后用户按下 Back 键返回活动 A,会出现什 么情况呢?其实还是会正常显示活动 A 的,只不过这时并不会执行 onRestart()方法,而是会 执行活动 A 的 onCreate()方法,因为活动 A 在这种情况下会被重新创建一次
onSaveInstanceState()方法会携带一个 Bundle 类型的参数,Bundle 提供了一系列的方 法用于保存数据,比如可以使用 putString()方法保存字符串,使用 putInt()方法保存整型数 据
5.活动的启动模式
启动模式一共有 4 种,分别是 standard、singleTop、singleTask 和 singleInstance,可以在 AndroidManifest.xml 中通过给标签指定 android:launchMode 属性来选择启动模式
5.1standard
在不进行显式指定的情况下,所有活动都会自动使用这种 启动模式
5.2singleTop
在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再 创建新的活动实例
5.3singleTask
每次启动该活动时系统首先会在返回栈中检查是否 存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统 出栈,如果没有发现就会创建一个新的活动实例
5.4singleInstance
在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都 共用的同一个返回栈,也就解决了共享活动实例的问题
6活动的最佳实践
6.1知晓当前是在哪一个活动
创建一个类继承自 AppCompatActivity
在 onCreate()方法中获取了当前实例的类名,并通过 Log 打印了出来
修改继承关系
6.2随时随地退出程序
新建一个类作为活动管理器 将当前正在创建的活动添加到活动管理器里
只需要调用 ActivityCollector.finishAll() 方法就可以了
killProcess() 方法用于杀掉一个进程
6.3启动活动的最佳写法
添加actionStart()方法 所有 SecondActivity 中需要的数据都是通过 actionStart()方法的参数传递过来的,然 后把它们存储到 Intent 中,最后调用 startActivity()方法启动 SecondActivity