Android那点事儿

原创 2018年01月31日 16:05:51

古人云“温故而知新”,不止是知新,还是知其然更知其所以然。所以,记下一些安卓的知识点,可以随时随地随兴温之。
1.什么是 Activity?
a. 四大组件之一,是用户交互的界面。一般的来说一个用户交互界面对应一个activity。
b.activity 是 Context 的子类,同时实现了 window.callback 和 keyevent.callback, 可以处理与窗体用户交互的事件.
c.常用的的有 FragmentActivitiyListActivity ,PreferenceActivity ,TabAcitivty 等…

2.如何保存 Activity 的状态?
Activity 的状态通常情况下系统会自动保存的,只有当我们需要保存额外的数据时才需要使用到这样的功能。一般来说, 调用 onPause()和 onStop()方法后的 activity 实例仍然存在于内存中, activity 的所有信息和状态数据不会消失, 当 activity 重新回到前台之后, 所有的改变都会得到保留。但是当系统内存不足时, 调用 onPause()和 onStop()方法后的 activity 可能会被系统摧毁, 此时内存中就不会存有该 activity 的实例对象了。如果之后这个 activity 重新回到前台, 之前所作的改变就会消失 。为 了 避 免 此 种 情 况 的 发 生 , 我 们 可 以 覆 写 onSaveInstanceState() 方 法 。onSaveInstanceState()方法接受一个 Bundle 类型的参数, 开发者可以将状态数据存储到这个Bundle对象中, 这样即使activity被系统摧毁, 当用户重新启动这个activity而调用它的onCreate()方法时, 上述的 Bundle 对象会作为实参传递给 onCreate()方法, 开发者可以从 Bundle 对象中取出保存的数据, 然后利用这些数据将 activity 恢复到被摧毁之前的状态。需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下 BACK 键退出 activity 时, 用户显然想要关闭这个 activity, 此时是没有必要保存数据 以供下次恢复的, 也就是 onSaveInstanceState()方法不会被调用. 如果调用onSaveInstanceState()方法, 调用将发生在 onPause()或 onStop()方法之间。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
或者重写onRestoreInstanceState()方法,从中取出保存的状态数据。

3.两个 Activity 之间跳转时必然会执行的是哪几个方法?
一般情况下比如说有两个activity,分别叫A,B,当在A里面激活B组件的时候, A会调用 onPause()方法,然后 B 调用onCreate() ,onStart(), onResume()。这个时候 B 覆盖了窗体, A 会调用 onStop()方法. 如果 B 是个透明的,或者是对话框的样式, 就不会调用 A 的 onStop()方法。

4.横竖屏切换时 Activity 的生命周期
此时的生命周期跟清单文件里的配置有关系。
a.不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期默认首先销毁当前 activity,然后重新加载。
b.设置 Activity android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法。通常在游戏开发, 屏幕的朝向都是写死的。

5.如何将一个 Activity 设置成窗口的样式
Activity 配置如下属性即可。
android:theme=”@android:style/Theme.Dialog”

6.如 何 退 出 Activity ? 如 何 安 全 退 出 已 调 用 多 个 Activity 的 Application?
a.通常情况用户退出一个 Activity 只需按返回键,我们写代码想退出 activity 直接调用 finish()方法就行。
b.记录打开的 Activity:每打开一个 Activity,就记录下来。在需要退出时,关闭每一个 Activity 即可。
//伪代码List lists ;// 在 application 全局的变量里面
lists = new ArrayList();
lists.add(this);
for(Activity activity: lists){
activity.finish();
}
c.发送特定广播:
1、在需要结束应用时,发送一个特定的广播,每个 Activity 收到广播后,关闭即可。
2、给某个 activity 注册接受接受广播的意图registerReceiver(receiver, filter)
3、如果过接受到的是 关闭 activity 的广播 就调用 finish()方法 把当前的 activity finish()掉
4、递归退出
在打开新的 Activity 时使用 startActivityForResult,然后自己加标志,在 onActivityResult 中处理,递归关闭。
5、其实 也可以通过 intent 的 flag 来实现 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)激活一个新的
activity。此时如果该任务栈中已经有该 Activity,那么系统会把这个 Activity 上面的所有 Activity 干掉。其实相当于
给Activity 配置的启动模式为 SingleTop。

7.Activity 的四种启动模式,singletop 和 singletask 区别是什么?一般书签的使用模式是 singletop,那为什么不使用 singletask?
singleTop 跟 standard 模式比较类似。唯一的区别就是,当跳转的对象是位于栈顶的 activity(应该可以理解为用户眼前所 看到的 activity)时,程序将不会生成一个新的 activity 实例,而是直接跳到现存于栈顶的那个 activity 实例。拿上面的例子来说,当 Act1 为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。
singleTask 模式和 singleInstance 模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的 activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。
这种模式相当有用,在以后的多 activity 开发中,常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的 activity 声明为 singleTask 模式,这种问题将不复存在。在主页的 Activity 很常用。

8.Android 中的 Context, Activity,Appliction 有什么区别?
相同:Activity 和 Application 都是 Context 的子类。Context 从字面上理解就是上下文的意思,在实际应用中它也确实
是起到了管理上下文环境中各个参数和变量的总用,方便我们可以简单的访问到各种资源。
不同:维护的生命周期不同。 Context 维护的是当前的 Activity 的生命周期,Application 维护的是整个项目的生命周
期。 使用 context 的时候,小心内存泄露,防止内存泄露,注意一下几个方面:
a.对于生命周期长的对象,可以使用 application,context。
b.避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周
期变化。
c.不要让生命周期长的对象引用 activity context,即保证引用 activity 的对象要与 activity 本身生命周期是
一样的。

9.两个 Activity 之间传递数据,除了 intent,广播接收者,contentprovider 还有啥?
a.利用 static 静态数据,public static 成员变量
b.利用外部存储的传输, 例如 File 文件存储 SharedPreferences 首选项
c.Sqlite 数据库
d.EventBus的传递

10.Context 是什么?
A.它描述的是一个应用程序环境的信息,即上下文。
B.该类是一个抽象(abstract class)类,Android 提供了该抽象类的具体实现类(ContextIml)。
C.通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个 Activity,发送广播,接受
Intent,信息,等。
http://blog.csdn.net/feiduclear_up/article/details/47356289
个人目前道行还浅,觉得此篇博客讲述的很不错。暂无发现什么问题之处。

版权声明:本文为博主原创文章,未经博主允许不得转载。

《小老爷们那点事儿》终极整理贴 (已完结)

《小老爷们那点事儿》终极整理贴  (已完结) 以下是分帖链接地址 小老爷们那点事儿整理帖之一 http://www.tulaoya.cn/bbs/read.php?tid=4 小老爷们那点事儿整理帖之...
  • metababy
  • metababy
  • 2007年08月24日 13:32
  • 18486

ThreadLocal 那点事儿(续集)

ThreadLocal 那点事儿(续集)
  • zhangming1013
  • zhangming1013
  • 2015年03月02日 15:06
  • 667

产品经理必懂的技术那点事儿(上)

一:产品思维与技术思维:   1:工程师是路径推理的技术思维,产品经理是用户场景的产品思维,技术思维表现为——实现方式、技术架构、技术价值、开发成本;而产品思维表现在——用户价值、使用场景、商业价...
  • Q___Narcissus
  • Q___Narcissus
  • 2018年01月30日 11:41
  • 131

maven 那点事儿

1、maven的默认中央仓库在%M2_HOME%/lib/maven-model-builder-3.3.9.jar/中的\org\apache\maven\model 的pom文件配置 如下- -...
  • sonycong
  • sonycong
  • 2016年02月08日 10:16
  • 319

产品经理必懂的技术那点事儿(中)

四:数据库知识: 1:数据库类似于一个进行数据存储的仓库,运行在服务器中,数据按照一定的规则存储,可以对数据库中的数据进行增删改查的操作。主要分为关系型数据库和非关系型数据库。   2:关系型数...
  • Q___Narcissus
  • Q___Narcissus
  • 2018年01月30日 16:07
  • 109

android Launcher那点事儿

今天讲关于Launcher的事情,但讲之前我想先说说我自己。     首先说一下学东西,以前我很害怕别人问我问题,因为我怕自己不会,回答不上来那多丢人啊,但现在我不这么想了,因为别人问你问题的时候也会...
  • zhiyuan263287
  • zhiyuan263287
  • 2014年01月12日 16:34
  • 1566

建模那点事儿(下)

本篇文章多图,请谨慎打开。 文首声明:此文中的所有数据均为个人在14年初收集而来,不保证其有效性,请勿使用该数据进行商业活动。 再声明:这个模型是我两年前做的东西了,有一些细节可能因为记忆...
  • zhuiqiuuuu
  • zhuiqiuuuu
  • 2018年01月13日 16:07
  • 66

AOP那点事儿:面向切面编程(2)

本文是《AOP 那点事儿》的续集。在上篇中,我们从写死代码,到使用代理;从编程式 Spring AOP 到声明式 Spring AOP。一切都朝着简单实用主义的方向在发展。沿着 Spring AOP ...
  • x137671
  • x137671
  • 2015年12月04日 16:50
  • 227

数据分析(入门篇)-第一章-数据分析那些事儿

《谁说菜鸟不会数据分析》这本书,看起来是本给小白看的书,实则内容丰富,值得认真学习。 从今天开始,看第三遍,顺便写个读书笔记,备忘。 数据分析类型:描述性数据分析、探索性数据分析、验证性数据分析 ...
  • hpdlzu80100
  • hpdlzu80100
  • 2017年07月02日 14:57
  • 218

漫谈程序员系列:让程序员蛋疼的那些事儿

也许你和我一样,讨厌这些……
  • foruok
  • foruok
  • 2015年03月30日 07:34
  • 16198
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android那点事儿
举报原因:
原因补充:

(最多只允许输入30个字)