转载请注明出处: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 思考(一个)的更多相关文章

  1. 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 ...

  2. Android设计和开发系列第一篇:Notifications通知(Develop—API Guides)

    Notifications IN THIS DOCUMENT Design Considerations Creating a Notification Required notification c ...

  3. 『转』android官网翻译好的蓝牙API接口说明

    Develop API Guides 连接 蓝牙 本文内容 基础知识 蓝牙权限 设置蓝牙 查找设备 查询配对的设备 发现设备 连接设备 连接为服务器 连接为客户端 管理连接 使用配置文件 供应商特定的 ...

  4. android自定义控件一站式入门

    自定义控件 Android系统提供了一系列UI相关的类来帮助我们构造app的界面,以及完成交互的处理. 一般的,所有可以在窗口中被展示的UI对象类型,最终都是继承自View的类,这包括展示最终内容的非 ...

  5. Android Support Library

    title: Android Support Library tags: Support Library,支持库 grammar_cjkRuby: true --- DATE: 2016-5-13. ...

  6. Androidbuttonshape形状资源码实现

    1.项目Src下创建drawable 看文档Develop/API Guides/App Resources/Drawable/Shape Drawable 单词:corners : 角  ;  gr ...

  7. 阅读 图解HTTP ,读书笔记

    阅读它的目的只有一个:就是想了解客户端与服务端的通信是怎么实现的?    数据的存储是怎么实现的?     数据流通过程中遇到什么问题.返回什么状态.该怎么解决? 网络基础 TCP / IP 通常使用 ...

  8. linux c 笔记-4 工程项目阅读推荐

    作者:周子涵链接:https://www.zhihu.com/question/27705862/answer/37738315来源:知乎著作权归作者所有,转载请联系作者获得授权. 转自网上不知道什么 ...

  9. Spark常用函数(源码阅读六)

    源码层面整理下我们常用的操作RDD数据处理与分析的函数,从而能更好的应用于工作中. 连接Hbase,读取hbase的过程,首先代码如下: def tableInitByTime(sc : SparkC ...

随机推荐

  1. 用N2N搭建简单的VPN

    1.   概述 N2N是一款开源的P2P VPN软件,其作者是著名的开源网管软件ntop的作者Luca Deri. N2N是一个双层架构的VPN,它让用户能够在网络层上开发P2P应用的典型功能,而不是 ...

  2. python语言学习9——使用list和tuple

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 位置 用索引来访问list中每一个位置的元素,记得索引是从0开始的,到 len-1结 ...

  3. ImportError: No module named _sqlite3 - 代码分享

    ImportError: No module named _sqlite3 - 代码分享 ImportError: No module named _sqlite3 作者:86市场网       点击 ...

  4. 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_2_建立开发环境

    本文对应书本5.1.3的内容 书本中通过CVS下载的源码 但是笔者实践的时候发现无法下载...地址已经失效了(也许是笔者的失误输错地址所致) 可以用git下载 地址是: http://git.ecli ...

  5. ORA-12520错误解决一则

    问题描写叙述: 今天突然发现连接数据库时报错,用pl/sql dev连接数据时,有时能连接上,有时连接时报: ORA-12520: TNS: 监听程序无法找到须要的server类型的可用句柄 通过se ...

  6. Codeforces 452A Eevee

    #include<bits/stdc++.h> using namespace std; string m[]={"vaporeon","jolteon&qu ...

  7. 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)

    想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...

  8. Mongodb数据备份恢复

    Mongodb数据备份恢复 一.MongoDB数据库导入导出操作 1.导出数据库 twangback为备份的文件夹 命令: mongodump -h 127.0.0.1[服务器IP] -d advie ...

  9. 向日葵sunlogin配置

    客户端配置: xxxx@TIM sunlogin_linux_1.0.0.25020]$ lsbin  html  install_sunlogin.sh  readme.txt  script  u ...

  10. VS2010,原来还有这些快捷键,果断记下来!

    一直认为VS的快捷键跟eclipse比起来差远了,那些由于不知道还有如此多有效却不知的快捷键阿 1. 检查括号匹配(在左右括号间切换): Ctrl +] 2. 选中从光标起到行首(尾)间的代码: Sh ...