转载请注明出处: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. php中empty()、isset()、is_null()和变量本身的布尔判断区别(转)

    在php脚本中,我们经常要去判断一个变量是否已定义或者是否为空,就需要用到这些函数empty().isset().is_null()和其本身作为参数,下面小段程序做个简要比较 <?php//预定 ...

  2. RIA Test:try catch 对 Error #1009 (无法访问空对象引用的属性或方法)的处理

    功能: 实现登录账户的强制登录, 用If 判断当前账户是否可用.若可用,则跳出if体直接登录,若不可用,则进入If体点击 “强制登录” 按钮. 问题:如果不可用,则if 条件中的对象不可见,这样程序会 ...

  3. SICP 解题集 — SICP 解题集

    SICP 解题集 — SICP 解题集 SICP 解题集¶ 这个文档的目标是成为中文化的.完整的<计算机程序的构造和解释>一书的解题集. 这个解题集的特色是: 对于每道习题,除了习题答案之 ...

  4. 改动file header (測)

    --改动file header ------------------------------------------------------------------------- cd $ORACLE ...

  5. iphone开发中数据持久化之——模型对象归档(二)

    在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...

  6. 微信公众平台PHP开发

    p=932" style="color: rgb(255, 153, 0); text-decoration: none;">微信公众平台PHP开发 2013.05 ...

  7. 【POJ 1741】Tree

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11570   Accepted: 3626 Description ...

  8. MVC数组模型绑定

    ASP.NET MVC数组模型绑定   在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type=& ...

  9. Patch to solve sqlite3_int64 error when building Python 2.7.3 on RHEL/CentOS

    Patch to solve sqlite3_int64 error when building Python 2.7.3 on RHEL/CentOS Patch to solve sqlite3_ ...

  10. Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析

    一.出问题的场景 1.Sensorservice线程正在处理compass sensor事件的过程中.检查了一次buffer的指针的有效性,并在稍后会传递到AKM获取数据的函数接口中使用 2.Sens ...