Intent用处

隐式使用intent,在被启动的activity的manifest文件配置该活动 
在出发活动建立intent时就写好和

网页浏览器用new intent 时用Intent.ACTION_VIEW
其在activity的manifest文件下的intent filter值为android.intent.action.VIEW

1
2
3
Intent intent = new Intent(Intent.ACTION_VIEW);//设置action
intent.setData(Uri.parse("http://www.baidu.com"));//将网址解析成一个Uri对象
startActivity(intent)//该方法会自动加上category为默认的android.intent.category.DEFAULT

调用系统内置的拨号界面,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
2
3
4
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}

那么每一个活动的onCreate()函数均执行其父类的onCreate()函数

1
2
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

在每个活动创建过程中,均会被集合类ActivityCollector()给收入其activities集合中,附上ActivityCollector的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//ActivityCollector集合类的代码
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<Activity>(); public static void addActivity(Activity activity) {
activities.add(activity);
} public static void removeActivity(Activity activity) {
activities.remove(activity);
} public static void finishAll() {
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}

同理:在每个活动即将被销毁,执行该活动的onDestroy(),

1
2
protected void onDestroy() {
super.onDestroy();

即会调用父类的onDestroy()如下:

1
2
3
4
5
//父类的onDestroy
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}

将此活动从Collector中移除

注意:List中存放的是活动的引用,可直接调用finish()方法,结束该活动

1
2
3
//需要注意的语法
public static List<Activity> activities = new ArrayList<Activity>();
for(Activity activity:activities)

我的理解:

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活动的更多相关文章

  1. Android学习笔记(二)——探究一个活动

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...

  2. Android:日常学习笔记(6)——探究活动(4)

    Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...

  3. Android:日常学习笔记(6)——探究活动(3)

    Android:日常学习笔记(6)——探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...

  4. Android:日常学习笔记(5)——探究活动(2)

    Android:日常学习笔记(5)——探究活动(2) 使用Intent在活动之间穿梭 什么是Intent Intent时Android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要 ...

  5. Android:日常学习笔记(4)——探究活动(1)

    Android:日常学习笔记(4)——探究活动 什么是活动: 活动是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互. 手动创建活动 创建空活动 1.新建活动时选择Add ...

  6. Android笔记——探究活动

    1.活动是什么       活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序 ...

  7. Android基础总结(2)——活动Activity

    1.什么是活动(Activity) 活动(Activity)是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见. 2.怎么使用 ...

  8. 【框架学习与探究之消息队列--EasyNetQ(1)】

    前言 本文欢迎转载,实属原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7603554.html 废话 既然都是废话了,所以大家就可以跳过了,这里是博主有事没事 ...

  9. [AWS vs Azure] 云计算里AWS和Azure的探究(1)

    转自:http://www.cnblogs.com/hotcan/archive/2013/01/31/2886794.html 云计算里AWS和Azure的探究(1) 全球领先的云的计算平台主要有两 ...

随机推荐

  1. C语言--C语言程序

    一.代码的编写 1.程序结构 1> C语言程序的结构:由函数构成 *任何一个c语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,我 ...

  2. SQL Server 内存开销分析

    第一步: 每一类资源用了多少内存. select          clerks.type,         sum(clerks.virtual_memory_reserved_kb) as Res ...

  3. python学习day8

    目录 一.异常 二.多线程 三.守护线程与join 四.GIL与多线程锁 五.递归锁与信号量 六.线程间同步与交互 七.多进程 八.进程间通信与数据共享 九.进程池 一.异常 1.异常处理 在编程过程 ...

  4. C语言运算符的优先级

    熟悉C语言的同学都知道,C语言众多的运算符及繁琐难记的优先级总是搞得我们这些C初学者头大.那么本文就 对C语言中所有的运算符进行汇总,并对其优先级进行一定的介绍. 这里虽然对所有C运算符的优先级进行了 ...

  5. 【HDU 5572 An Easy Physics Problem】计算几何基础

    2015上海区域赛现场赛第5题. 题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5572 题意:在平面上,已知圆(O, R),点B.A(均在圆外),向量 ...

  6. PHP内核学习(一)SAPI

    学习PHP-src之前,我准备了一份源文件: GitHub下载->https://github.com/helingfeng/php-src 简单分析一下源码的目录结构: 1. root根目录下 ...

  7. java MongoDB driver error infos

    DataTables warning: table id=dateTable - Ajax error. For more information about this error, please s ...

  8. 网易云课堂_Linux操作系统入门(嵌入式开发零基础Ⅰ)_章节4:SHELL 环境

    课时44命令别名 命令别名 命令别名的概念: 命令别名的查看:alias 命令别名的设置:alias myls='ls -a' 课时45通配符 通配符 通配符都概念: 通配符是代表字符通用匹配的一种系 ...

  9. Median of Two Sorted 求两个有序数组的中位数

    中位数是把一个数的集合划分为两部分,每部分包含的数字个数相同,并且一个集合中的元素均大于另一个集合中的元素. 因此,我们考虑在一个任意的位置,将数组A划分成两部分.i表示划分数组A的位置,如果数组A包 ...

  10. 开源企业IM-免费企业即时通讯-ENTBOOST V2014.180 Linux版本号正式公布

    ENTBOOST,VERSION 2014.180 Linux版本号公布,主要添加企业IM应用集成功能,完好安卓SDK功能及部分BUG修正: 7/1(明天)公布Windows版本号,敬请关注! ENT ...