没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
16页
Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之 中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可 以用onSaveInstanceState保存其状态)。 对于Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其 次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState), 以及Activity之间的跳转和数据传输(intent)。 Activity中常用的函数有SetContentView() findViewById() finish() startActivity(),其生命周期涉及的函数有: void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy()
资源推荐
资源详情
资源评论
ANDROID 复习摘要
1、什么是 ANR 如何避免它?
ANR 定义
在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户
显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not
Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应
用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设
计很重要,这样,系统不会显示 ANR 给用户。
如何避免:
考虑上面的 ANR 定义,让我们来研究一下为什么它会在 Android 应用程序里发生和
如何最佳构建应用程序来避免 ANR。
Android 应用程序通常是运行在一个单独的线程(例如,main)里。这意味着你
的应用程序所做的事情如果在主线程里占用了太长的时间的话,就会引发 ANR 对
话框,因为你的应用程序并没有给自己机会来处理输入事件或者 Intent 广播。
因此,运行在主线程里的任何方法都尽可能少做事情。特别是,Activity 应该在
它的关键生命周期方法(如 onCreate()和 onResume())里尽可能少的去做创建操
作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺
寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。
然而,不是说你的主线程阻塞在那里等待子线程的完成——也不是调用
Thread.wait()或是 Thread.sleep()。替代的方法是,主线程应该为子线程提供
一个 Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,
将能保证你的主线程保持对输入的响应性并能避免由于 5 秒输入事件的超时引发
的 ANR 对话框。这种做法应该在其它显示 UI 的线程里效仿,因为它们都受相同的
超时影响。
IntentReceiver 执行时间的特殊限制意味着它应该做:在后台里做小的、琐碎的
工作如保存设定或者注册一个 Notification。和在主线程里调用的其它方法一样
,应用程序应该避免在 BroadcastReceiver 里做耗时的操作或计算。但不再是在
子线程里做这些任务(因为 BroadcastReceiver 的生命周期短),替代的是,如
果响应 Intent 广播需要执行一个耗时的动作的话,应用程序应该启动一个
Service。顺便提及一句,你也应该避免在 Intent Receiver 里启动一个 Activity
,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果
你的应用程序在响应 Intent 广播时需要向用户展示什么,你应该使用
Notification Manager 来实现。
一般来说,在应用程序里,100 到 200ms 是用户能感知阻滞的时间阈值。因此,这
里有一些额外的技巧来避免 ANR,并有助于让你的应用程序看起来有响应性。
如果你的应用程序为响应用户输入正在后台工作的话,可以显示工作的进度
(ProgressBar 和 ProgressDialog 对这种情况来说很有用)。
特别是游戏,在子线程里做移动的计算。
若你的应用程序有一个耗时的初始化过程的话,考虑可以显示一个 Splash
Screen 或者快速显示主画面并异步来填充这些信息。在这两种情况下,你都应该
显示正在进行的进度,以免用户认为应用程序被冻结了。
本文来自 CSDN 博客,转载请标明出处:
http://blog.csdn.net/Zengyangtech/archive/2010/11/21/6025671.aspx
2、什么情况会导致 Force Close ?如何避免?能否捕获导致其的异常?
3、Android 本身的 api 并未声明会抛出异常,则其在运行时有无可能抛出 runtime
异常,你遇到过吗?诺有的话会导致什么问题?如何解决?
4、简要解释一下 activity、 intent 、intent filter、service、Broadcast、
BroadcaseReceiver
Activity
Android 中,Activity 是所有程序的根本,所有程序的流程都运行在 Activity 之
中,Activity 具有自己的生命周期(由系统控制生命周期,程序无法改变,但可
以用 onSaveInstanceState 保存其状态)。
对于 Activity,关键是其生命周期的把握(如那张经典的生命周期图=.=),其
次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState),
以及 Activity 之间的跳转和数据传输(intent)。
Activity 中常用的函数有 SetContentView() findViewById() finish()
startActivity(),其生命周期涉及的函数有:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
注意的是,Activity 的使用需要在 Manifest 文件中添加相应的<Activity>,并设
置其属性和 intent-filter。
Intent
Android 中提供了 Intent 机制来协助应用间的交互与通讯,Intent 负责对应用中
一次操作的动作、动作涉及数据、附加数据进行描述,Android 则根据此 Intent
的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调
用。Intent 不仅可用于应用程序之间,也可用于应用程序内部的
Activity/Service 之间的交互。因此,Intent 在这里起着一个媒体中介的作用,
专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。在 SDK
中给出了 Intent 作用的表现形式为:
· 通过 Context.startActivity() orActivity.startActivityForResult() 启
动一个 Activity;
· 通过 Context.startService() 启动一个服务,或者通过
Context.bindService() 和后台服务交互;
· 通过广播方法(比如 Context.sendBroadcast
(),Context.sendOrderedBroadcast(), Context.sendStickyBroadcast()) 发
给 broadcast receivers。
Intent 属性的设置,包括以下几点:(以下为 XML 中定义,当然也可以通过
Intent 类的方法来获取和设置)
(1)Action,也就是要执行的动作
SDk 中定义了一些标准的动作,包括
onstant
Target component
Action
ACTION_CALL
activity
Initiate a phone call.
ACTION_EDIT
activity
Display data for the user to edit.
ACTION_MAIN
activity
Start up as the initial activity of a task, with no data input and no
returned output.
ACTION_SYNC
activity
Synchronize data on a server with data on the mobile device.
ACTION_BATTERY_LOW
broadcast receiver
A warning that the battery is low.
ACTION_HEADSET_PLUG
broadcast receiver
A headset has been plugged into the device, or unplugged from it.
ACTION_SCREEN_ON
broadcast receiver
The screen has been turned on.
ACTION_TIMEZONE_CHANGED
broadcast receiver
The setting for the time zone has changed.
当然,也可以自定义动作(自定义的动作在使用时,需要加上包名作为前缀,如
"com.example.project.SHOW_COLOR”),并可定义相应的 Activity 来处理我们
的自定义动作。
(2)Data,也就是执行动作要操作的数据
Android 中采用指向数据的一个 URI 来表示,如在联系人应用中,一个指向某联系
人的 URI 可能为:content://contacts/1。对于不同的动作,其 URI 数据的类型是
不同的(可以设置 type 属性指定特定类型数据),如 ACTION_EDIT 指定 Data 为文
件 URI,打电话为 tel:URI,访问网络为 http:URI,而由 content provider 提供的
数据则为 content: URIs。
(3)type(数据类型),显式指定 Intent 的数据类型(MIME)。一般 Intent 的
数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显
式指定的类型而不再进行推导。
(4)category(类别),被执行动作的附加信息。例如 LAUNCHER_CATEGORY 表
示 Intent 的接受者应该在 Launcher 中作为顶级应用出现;而
ALTERNATIVE_CATEGORY 表示当前的 Intent 是一系列的可选动作中的一个,这些动
作可以在同一块数据上执行。还有其他的为
Constant
Meaning
CATEGORY_BROWSABLE
The target activity can be safely invoked by the browser to display
data referenced by a link — for example, an image or an e-mail
message.
CATEGORY_GADGET
The activity can be embedded inside of another activity that hosts
gadgets.
CATEGORY_HOME
The activity displays the home screen, the first screen the user sees
when the device is turned on or when the HOME key is pressed.
CATEGORY_LAUNCHER
The activity can be the initial activity of a task and is listed in
the top-level application launcher.
CATEGORY_PREFERENCE
The target activity is a preference panel.
(5)component(组件),指定 Intent 的的目标组件的类名称。通常 Android 会
根据 Intent 中包含的其它属性的信息,比如 action、data/type、category 进行
查找,最终找到一个与之匹配的目标组件。但是,如果 component 这个属性有指
定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性
以后,Intent 的其它所有属性都是可选的。
(6)extras(附加信息),是其它所有附加信息的集合。使用 extras 可以为组
件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮
件的标题、正文等保存在 extras 里,传给电子邮件发送组件。
理解 Intent 的关键之一是理解清楚 Intent 的两种基本用法:一种是显式的 Intent
,即在构造 Intent 对象时就指定接收者;另一种是隐式的 Intent,即 Intent 的发
送者在构造 Intent 对象时,并不知道也不关心接收者是谁,有利于降低发送者和
接收者之间的耦合。
对于显式 Intent,Android 不需要去做解析,因为目标组件已经很明确,Android
需要解析的是那些隐式 Intent,通过解析,将 Intent 映射给可以处理此 Intent
的 Activity、IntentReceiver 或 Service。
Intent 解析机制主要是通过查找已注册在 AndroidManifest.xml 中的所有
IntentFilter 及其中定义的 Intent,最终找到匹配的 Intent。在这个解析过程中
,Android 是通过 Intent 的 action、type、category 这三个属性来进行判断的,
判断方法如下:
· 如果 Intent 指明定了 action,则目标组件的 IntentFilter 的 action 列表中就
必须包含有这个 action,否则不能匹配;
· 如果 Intent 没有提供 type,系统将从 data 中得到数据类型。和 action 一样,
目标组件的数据类型列表中必须包含 Intent 的数据类型,否则不能匹配。
· 如果 Intent 中的数据不是 content: 类型的 URI,而且 Intent 也没有明确指定
剩余15页未读,继续阅读
资源评论
zhangxiaodao
- 粉丝: 4
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab开发的根据rvm回归模型自己编的matlab程序.rar
- 高效C++学生成绩管理系统:教育技术+C++17编程+数据管理+教务自动化
- 基于matlab开发的Tipping的相关向量机RVM的回归MATLAB程序,有英文注释,可以运行.rar
- 一个点击正反转程序实例,可实现案件电机正反转
- 搜索链接淘特搜索引擎共享版-tot-search-engine.rar
- 第十八届全国大学生智能汽车竞赛 摄像头组/镜头组
- 基于matlab开发的AUV惯性导航系统matlab仿真程序,包括轨迹生成、gps和sins组合、gps和dvl组合.rar
- 基于SSM的“个性化电子相册”的设计与实现.zip
- 如何在撰写科研文献时,使用ai工具辅助去完成科研工作
- 吉林大学计组笔记 自用 基于b站翼云图灵的课.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功