探究adroid活动
Intent用处
隐式使用intent,在被启动的activity的manifest文件配置该活动
在出发活动建立intent时就写好和
网页浏览器用new intent 时用Intent.ACTION_VIEW
其在activity的manifest文件下的intent filter值为android.intent.action.VIEW
1 |
Intent intent = new Intent(Intent.ACTION_VIEW);//设置action |
调用系统内置的拨号界面,new intent 时使用Intent.ACTION_DIAL
其值为android.intent.action.
退出一个活动回传数据
在一个活动中使用startActivityForResult(intent,requestcode),在被启动的Activity中setResult(resultcode,intent )
当界面finish或者back时,会回调启动方activity的onActivityResult(requestcode,resultcode ,Intent data)方法
这个requestcode是启动方activity,在启动其他activity时,所用到的请求码,用于标识是哪个活动回调了这个方法,resultcode是被调用活动返回的结果码,通常RESULT_OK/RESULT_CANCEL
Intent data即为被调用活动 返回的intent
data.getStringExtra(”键”)
intent.putExtra(“键”,“键值”)
在覆写onBackPressed 去掉 ,能起到应该要有的输出的效果
super.onBackPressed();
活动的生命周期
1. 活动生命周期分类:
完整生存期:onCreate<->onDestroy
可见生存期:onStart<->onStop
前台生存期:onResume<->onPause
出现rendering problems时,可更改主题或降低android版本,均可在在手机preview上方更改
2. 对话框活动和普通活动区别
- 当从A活动跳转到B活动,A活动会执行onPause->onStop,如果此时返回A,A活动执行onRestart->onStart->onResume
- 如果从A活动跳转到对话框类型的B活动,A活动只会执行onPause,返回时执行onResume
在活动完全不可见(这里的可见与否,指的是用户还能不能看到.当B活动覆盖A活动时,A活动那个就不可见了.而A活动弹出对话框B,A活动依旧可见,就只会执行onPause())的时候执行onStop()
要将一个活动注册为对话框格式,只需在manifest文件下对活动进行注册<activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog"></activity>
3. 活动在意外情况下被回收后,返回该活动,该如何保存原有的数据?
如果A活动跳转到B活动,A活动会onPause->onStop,这时候系统如果内存不足,A活动就会被回收,若此时从B活动退回A活动,就不会再执行A活动的onStart(因为活动已被回收),现在执行onCreate,新建活动,为了能呈现活动被回收前的的状态/数据,Activity里面有个method–onSaveInstanceState(Bundle outstate),这个方法能保证在活动被回收前将数据/状态存储在outstate这个Bundle中,待到该活动被回收后,重新onCreate(Bundle savedInstanceState),savedInstanceState就不再为null,而是outstate这个bundle,所以在onCreate(Bundle savedInstanceState)函数中加入判断savedInstanceState是否为空可
预防活动在系统内存不够时被回收,而返回该活动后原有的数据不在的情况
4. 总结下,Intent传入数据和取用数据的方法:
Intent intent = new Intent();
intent.putExtra(“键”,”键值”);
intent.getStringExtra(”键”);
Bundle传入数据和取用数据的方法:
Bundle bundle = new Bundle();
bundle.putString(“键”,”键值”);
bundle.getString(“键”);
活动的状态:
1. standard
可在Manifest文件下配置活动的启动模式,默认的是standard,每次启动都会产生创建一个新的实例
2. singleTop
如果发现返回栈的栈顶已经是该活动,就不会再创建新的活动实例。若从A跳转到B活动,此时B活动位于栈顶,若此时再按下按钮到A活动,A活动会被创建新的实例,因为A不在栈顶
3. singleTask
从A活动跳转到B活动,再从B跳转到A,系统首先检查返回栈,如果有该活动,其上所有活动全出栈.需要特别注意的是,在B->A过程实地运行时,过程:是A先restart,后B onDestroy
是通过直接出栈其上活动来重启该活动
4. singleInstance
在一个应用程序中,如果某个活动启动模式是singleInstance,该活动会单独存在于一个返回栈(getTaskId()可用于该活动存在的返回栈编号),该活动也可被其他应用程序使用,
应用程序中其他活动同属于一个返回栈
例:A(返回栈1)->B(返回栈2)->C(返回栈1)
点击Back键返回A活动,再Back,到B活动,返回栈1空,再Back,返回栈2空,即退出程序
关于活动的几个小窍门:
1. 接手一个项目,不知道界面对应的活动是哪一个,方法:
新建一个class让他继承自Activity,无需再Manifest文件中注册
让其余活动继承自该class。这些活动间接继承自Activity,依旧拥有Activity的功能
只是每个活动onCreate(),都会去执行父类的onCreate函数,进而打印出该活动的类名
2. 随时随地退出程序:
注意:按下home键,活动会执行oonPause->onStop,因为活动都完全不可见了,这叫做程序被挂起
建立一个集合类ActivityCollector(),对所有的活动进行管理,这里面所有方法和实例变量均采用public static,其他类可直接引用
通过建立一个继承自Activity的基类,再让其他的三个活动继承自该基类,在该基类的onCreate()函数代码如下:
1 |
protected void onCreate(Bundle savedInstanceState) {
|
那么每一个活动的onCreate()函数均执行其父类的onCreate()函数
1 |
protected void onCreate(Bundle savedInstanceState) {
|
在每个活动创建过程中,均会被集合类ActivityCollector()给收入其activities集合中,附上ActivityCollector的代码:
1 |
//ActivityCollector集合类的代码 |
同理:在每个活动即将被销毁,执行该活动的onDestroy(),
1 |
protected void onDestroy() {
|
即会调用父类的onDestroy()如下:
1 |
//父类的onDestroy |
将此活动从Collector中移除
注意:List中存放的是活动的引用,可直接调用finish()方法,结束该活动
1 |
//需要注意的语法 |
我的理解:
class FirstActivity extends Activity表明了这是一种继承自Activity的类,返回栈里的一个个活动相当于是对象。对继承自Activity的类在Manifest里面注册该种活动类应该以怎样的LaunchMode启动。
注意事项
Gradle build finished with 1 error(s) in 9s 110ms
出现这样的错误,通常可能是模拟器开着同样的活动,退出活动,重新运行
要注意setOnclickListener的格式(括号分号)
android studio不稳定,遇到android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.gaby.activitylifecycletest/com.example.gaby.activitylifecycletest.NormalActivity}; have you declared this activity in your AndroidManifest.xml?
提示在manifest文件下找不到活动,如果确认程序无误,重新run一次就好
在一个类中新建一个常量
private static final String TAG = “MAINACTIVITY”
关于活动的几点沉思:
- 当我们点击A活动的Back键,活动就执行onDestroy(onDestroy是在活动被销毁之前调用),执行后活动状态变为销毁状态
- 只要按了Back键,虽然打开后台还有那个app,可是这时候启动这个activity又得onCreate(),因为在按下Back键后,活动已执行onDestroy,状态变为销毁状态(系统倾向于回收)
- 点击Back键的过程是让栈顶活动出栈的过程,每个活动都会执行onPause->onStop->onDestroy
探究adroid活动的更多相关文章
- Android学习笔记(二)——探究一个活动
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...
- Android:日常学习笔记(6)——探究活动(4)
Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...
- Android:日常学习笔记(6)——探究活动(3)
Android:日常学习笔记(6)——探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...
- Android:日常学习笔记(5)——探究活动(2)
Android:日常学习笔记(5)——探究活动(2) 使用Intent在活动之间穿梭 什么是Intent Intent时Android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要 ...
- Android:日常学习笔记(4)——探究活动(1)
Android:日常学习笔记(4)——探究活动 什么是活动: 活动是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互. 手动创建活动 创建空活动 1.新建活动时选择Add ...
- Android笔记——探究活动
1.活动是什么 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序 ...
- Android基础总结(2)——活动Activity
1.什么是活动(Activity) 活动(Activity)是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见. 2.怎么使用 ...
- 【框架学习与探究之消息队列--EasyNetQ(1)】
前言 本文欢迎转载,实属原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7603554.html 废话 既然都是废话了,所以大家就可以跳过了,这里是博主有事没事 ...
- [AWS vs Azure] 云计算里AWS和Azure的探究(1)
转自:http://www.cnblogs.com/hotcan/archive/2013/01/31/2886794.html 云计算里AWS和Azure的探究(1) 全球领先的云的计算平台主要有两 ...
随机推荐
- 求绝对值,hdu-2003
求绝对值 Problem Description 求实数的绝对值. Input 输入数据有多组,每组占一行,每行包含一个实数. Output 对于每组输入数据,输出它的绝对值,要求每组数据输出 ...
- TensorFlow深度学习笔记 循环神经网络实践
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 加 ...
- DM368启动串口打印分析
DM36x initialization passed! TI UBL Version: 1.50 Booting Catalog Boot Loader //启动目 ...
- 常用的IO流
常用的IO流 •根据处理数据类型的不同分为:字节流和字符流 •根据数据流向不同分为:输入流和输出流 字节流:字节流以字节(8bit)为单位,能处理所有类型的数据(如图片.avi等). 字节输入流:In ...
- Uber上海公司被司机打上门
“Uber上周的工资没有到账,司机们都急了.”9月13日,<IT时报>记者接到Uber司机爆料,称Uber(优步)拖欠工资,客服给的解释是银行系统对接问题,但多名司机赶往Uber上海公司咨 ...
- hdu 4393 Throw nails(STL之优先队列)
Problem Description The annual school bicycle contest started. ZL is a student in this school. He is ...
- HDU2842-Chinese Rings(递推+矩阵高速幂)
pid=2842">题目链接 题意:求出最少步骤解出九连环. 取出第k个的条件是,k-2个已被取出,k-1个仍在支架上. 思路:想必九连环都玩过吧,事实上最少步骤就是从最后一个环開始. ...
- URAL 1736 Chinese Hockey 网络流+建图
题目链接:点击打开链接 题意: 给定n个队伍的得分情况,输出随意一个可行解. n个队伍随意2个队伍 a, b 间有且仅有一场比赛. 比赛结果分4种: 1.a +3, b +0 2.a +0, b +3 ...
- satellite-menu和ArcMenu
github上的开源库其实还是很不错的,之前的时候总感觉学一些开源库比较麻烦,里边有好多方法什么的,今天终于迈出了第一步,中间也遇到了一些问题,现在总结下,也给其他刚开始学习开源库的小伙伴一些指导: ...
- 安卓开发之RecyclerView
RecyclerView是一个非常好用的控件,它的效果和ListView很相似,甚至可以说RecyclerView的出现是来取代ListView的 RecyclerView比ListView更加灵活, ...