【白痴弟弟和你加强应用层】阅读 Develop API Guides 思考(一个)
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992
动态检測设备属性
我们能够使用以下的代码动态检測当前设备是否具备某一个特性,如是否有方向传感器
PackageManager pm = getPackageManager();
if(!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
// This device does not have a compass, turn off the compass feature
disableCompassFeature();
}
关于targetSdkVersion的含义
我们常常在清单文件中面这样设置
<manifest ... >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
...
</manifest>
android:minSdkVersion是指我们的App兼容的最低版本号,也就是我们的App在这个版本号之下就不能正常执行了,可能是由于使用了更高版本号的API或者是Theme,反正就是不能正常执行。
而android:targetSdkVersion属性所指定的则是经过我们优化的最高版本号。这个属性并不能保证我们我们的App不能执行在更高的版本号上。而是用来说明我们的App是否应该继承在更高版本号上发生的行为改变。假设我们没有更新:targetSdkVersion到最新的版本号,那么在最新的版本号上执行的时候。那么系统就假设我们的App是须要向后兼容的。
举个样例,在4.4版本号中,AlarmManager的行为发生了改变。为了节省电量,系统会将时间相差点儿相同的Alarm放在一起执行,这样就不能保证你的Alarm准时执行。所以说,假设你的targetSdkVersion大于等于19,那么执行时间就是不确定的。可是假设是小于19,那么就会使用之前老的API。保证Alarm能够准时执行。
关于onSaveInstanceState()的高级知识
我们都知道假设实现onSaveInstanceState(),能够在里面保存一些界面的状态,这样在UI恢复的时候,可能会使用保存的值恢复UI现场。
事实上,默认的onSaveInstanceState()实现会保存当前界面全部具有id属性的View的状态,用于现场恢复。Android的framework框架中的差点儿全部的控件都恰当的实现了onSaveInstanceState()方法,比方EditText会保存文本。CheckBox会保存选中状态等。
所以,假设你想恢复现场,给布局中的控件都设置一个id属性就ok啦~
当然,我们也能够自己控制让View不自己保存状态。仅仅要设置 android:saveEnabled为false或者是调用setSaveEnabled()就能够了
另外。假设你想測试你的Activity能不能正常的保存用户数据,你仅仅须要改变你的屏幕方向就能够測试啦。在屏幕方向发生改变的时候。你的Activity会被Destory然后Create,Activity上的信息都不应该丢失,否则,去改改你的代码吧。
事实上啊,之所以屏幕方向改变,Activity会又一次生成,是由于在执行时。设备的configurations发生了改变,为了让我们App能够感应这样的变化并作出正确的反应。系统会又一次载入当前的Activity,这样的变化包含屏幕方向变化,语言环境变化,键盘状态变化等等。和我们在Activity的标签下设置的 android:configChanges是全然一样的
关于startActivity和Intent
我们使用Intent来启动一个Activity是再简单只是的事情了,可是,假设你想要发送一个隐式意图开启Activity的话。你须要考虑没有Activity与你的Intent的Action匹配的情况,由于这样会造成程序crash。所以,以后在发送隐式意图的时候,用以下的这样的形式吧
Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
.putExtra(AlarmClock.EXTRA_MESSAGE, "Timer'")
.putExtra(AlarmClock.EXTRA_LENGTH, 60)
.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(this, "No Activity", Toast.LENGTH_SHORT).show();
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
【白痴弟弟和你加强应用层】阅读 Develop API Guides 思考(一个)的更多相关文章
- Android设计和开发系列第二篇:Action Bar(Develop—API Guides)
Action Bar IN THIS DOCUMENT Adding the Action Bar Removing the action bar Using a logo instead of an ...
- Android设计和开发系列第一篇:Notifications通知(Develop—API Guides)
Notifications IN THIS DOCUMENT Design Considerations Creating a Notification Required notification c ...
- 『转』android官网翻译好的蓝牙API接口说明
Develop API Guides 连接 蓝牙 本文内容 基础知识 蓝牙权限 设置蓝牙 查找设备 查询配对的设备 发现设备 连接设备 连接为服务器 连接为客户端 管理连接 使用配置文件 供应商特定的 ...
- android自定义控件一站式入门
自定义控件 Android系统提供了一系列UI相关的类来帮助我们构造app的界面,以及完成交互的处理. 一般的,所有可以在窗口中被展示的UI对象类型,最终都是继承自View的类,这包括展示最终内容的非 ...
- Android Support Library
title: Android Support Library tags: Support Library,支持库 grammar_cjkRuby: true --- DATE: 2016-5-13. ...
- Androidbuttonshape形状资源码实现
1.项目Src下创建drawable 看文档Develop/API Guides/App Resources/Drawable/Shape Drawable 单词:corners : 角 ; gr ...
- 阅读 图解HTTP ,读书笔记
阅读它的目的只有一个:就是想了解客户端与服务端的通信是怎么实现的? 数据的存储是怎么实现的? 数据流通过程中遇到什么问题.返回什么状态.该怎么解决? 网络基础 TCP / IP 通常使用 ...
- linux c 笔记-4 工程项目阅读推荐
作者:周子涵链接:https://www.zhihu.com/question/27705862/answer/37738315来源:知乎著作权归作者所有,转载请联系作者获得授权. 转自网上不知道什么 ...
- Spark常用函数(源码阅读六)
源码层面整理下我们常用的操作RDD数据处理与分析的函数,从而能更好的应用于工作中. 连接Hbase,读取hbase的过程,首先代码如下: def tableInitByTime(sc : SparkC ...
随机推荐
- [Android阅读代码]android-async-http源码学习一
android-async-http 下载地址 一个比较常用的Http请求库,基于org.apache.http对http操作进行封装. 特点: 1.每一个HTTP请求发生在UI线程之外,Client ...
- [Xcode]some little skill
Date:2014-1-2 Summary: 自己在使用Xcode的一些小习惯,记录下来,我是这么用的,你呢? Contents:1.使用#warning 在工作中,难免需要做一些test,但是又怕忘 ...
- Flex与Java交互(Flex调用java类展示数据)解析xml展示数据
Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...
- OCP读书笔记(8) - 监控和调优RMAN
监视RMAN作业 1. 创建rman备份: RMAN> run { allocate channel ch1 type disk; allocate channel ch2 type disk; ...
- SESC中的热量模拟器
SESC安装见前文 配置sesc支持热量模拟 ../sesc/configure --enable-power --enable-therm make 遇到问题: 1 找不到 liblevmar.a ...
- CentOS 7 安装MySql Server 5.6
1. 安装MySql Server 在/etc/yum.repos.d/目录下添加以下文件mysql-community.repo文件,内容如下: [mysql56-community] name=M ...
- 使用Ambari快速部署Hadoop大数据环境
使用Ambari快速部署Hadoop大数据环境 发布于2013-5-24 前言 做大数据相关的后端开发工作一年多来,随着Hadoop社区的不断发展,也在不断尝试新的东西,本文着重来讲解下Amb ...
- ASP.NET 联想控件(Autocomplete)测试可用 ascx
效果图 前台 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Auto ...
- Android的PackageManager的使用
Android系统提供了很多服务管理的类,包括ActivityManager.PowerManager(电源管理).AudioManager(音频管理)以及PackageManager管理类.Pack ...
- java该HashTable,HashMap和HashSet
同一时候我们也对HashSet和HashMap的核心方法hashcode进行了具体解释,见<探索equals()和hashCode()方法>. 万事俱备,那么以下我们就对基于hash算法的 ...