【凯子哥带你夯实应用层】读 Develop API Guides 有感(一)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

    • 动态检测设备属性
    • 关于targetSdkVersion的含义
    • 关于onSaveInstanceState的高级知识
    • 关于startActivity和Intent

动态检测设备属性

我们可以使用下面的代码动态检测当前设备是否具备某一个特性,如是否有方向传感器

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();
        }
时间: 2024-10-14 07:43:30

【凯子哥带你夯实应用层】读 Develop API Guides 有感(一)的相关文章

【凯子哥带你夯实应用层】滚来滚去,滚来滚去...Scroller相关类使用大揭秘!!!

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 话接上文,在前一篇文章里面,咱们一起分析了"知乎"的回答详情页的需求,然后顺便用代码实现了下,忘了的可以再去看看[凯子哥带你夯实应用层]都说"知乎"逼格高,我们来实现"知乎"回答详情页动画效果 .其实在很多的界面效果中,这种"滚动"的效果能带来很多的惊喜,各种效果也很有搞头,说不定什么时候,Boss看着哪个界面好看,就让你去仿个过来,你

【凯子哥带你夯实应用层】都说“知乎”逼格高,我们来实现“知乎”回答详情页动画效果

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 2014已经远去,2015年的目标很简单,就是继续熟悉Android的上层API,虽然偶尔会为了某个问题去研究下FrameWork的代码,但是对于我们这种新手来说,只有对上层的API用的熟练了,才能更好的往下研究原理.所以,今年的任务就是继续学习和研究Android的上层API的使用,顺便写一篇毕业论文,然后毕个业. OK,从这篇开始,咱们就开始[凯子哥带你夯实应用层]系列,如果你有想要实现的界面效果,或

【凯子哥带你夯实应用层】还在用XListView?试试更漂亮的AutoLoadListView吧!

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 关于上拉刷新和下拉加载,已经有不少的解决方案了,XListView和PullToRefresh应该是被广为熟知的开源项目,项目很棒,可以解决我们的需求.但是,今天咱们用一种更简单的方式,来实现上拉刷新和下拉加载功能,我叫它AutoLoadListView~ 先来一张效果图. 刷新效果使用19版本之后的v4兼容包的SwipeRefreshLayout实现,效果很漂亮,而自动加载下一页的跳动效果,则是使用了另

【凯子哥带你夯实应用层】Android的Google官方设计指南(上)

Android 设计规范 时间 2015.3.2 版本 V1.0 翻译 杨鹏 整理 赵凯强 本文章是我公司一个大牛之前的公司同事翻译的Android的Google官方设计指导,经过我整理而成,分享给大家,欢迎转载,但是请保留出处和翻译作者.本指导内容详实.规范,无论是初级开发者还是高级开发者,甚至是公司产品设计和美工,都应该研读学习,特此推荐!由于文章内容较颇多,所以我分为几篇发布,方便大家阅读学习.如果对你有帮助,请评论或者顶一下代表支持,谢谢! 还是人多力量大啊,有同学告诉我已经有这样的资料

【凯子哥带你夯实应用层】使用ActionProvider实现子菜单时遇到的一个坑

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 最近在重温Android基础,在看到ActionProvider的时候遇到一个坑,分享到大家,避免入坑. 首先简单介绍下ActionProvider. ShareActionProvider你应该用过吧?就是使用系统自带的分享功能,其实ShareActionProvider就是ActionProvider的一个子类,可以在ActionBar上面显示为一个MenuItem,但是我们可以自定义事件行为,所以我

【凯子哥带你夯实应用层】新手必备的常用代码片段整理(一)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 以下内容来自多个开源项目的整理和自己的项目积累 拨打电话 跳转至拨号界面 发送短信 唤醒屏幕并解锁 判断当前App处于前台还是后台状态 判断当前手机是否处于锁屏睡眠状态 判断当前是否有网络连接 判断当前是否是WIFI连接状态 安装APK 判断当前设备是否为手机 获取当前设备宽高单位px 获取当前设备的IMEI需要与上面的isPhone一起使用 获取当前设备的MAC地址 获取当前程序的版本号 拨打电话 pu

【凯子哥带你夯实应用层】使用ActionMode实现有删除动画的多选删除功能

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 ActionMode是3.0之后,官方推荐的一种上下文菜单的实现方式,在之前一直用的是Context Menu,今天这篇文章简单介绍一下ActionMode,并实现多选删除功能. 如果要在ListView这类控件中实现多选,我们可以通过设置setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL)来实现,然后通过设置setMultiChoiceModeListen

【转载】【凯子哥带你学Framework】Activity启动过程全解析

It's right time to learn Android's Framework ! 前言 一个App是怎么启动起来的? App的程序入口到底是哪里? Launcher到底是什么神奇的东西? 听说还有个AMS的东西,它是做什么的? Binder是什么?他是如何进行IPC通信的? Activity生命周期到底是什么时候调用的?被谁调用的? 等等... 你是不是还有很多类似的疑问一直没有解决?没关系,这篇文章将结合源码以及大量的优秀文章,站在巨人的肩膀上,更加通俗的来试着解释一些问题.但是毕

【凯子哥带你学Framework】Activity启动过程全解析

It's right time to learn Android's Framework ! 前言 学习目标 写作方式 主要对象功能介绍 主要流程介绍 zygote是什么有什么作用 SystemServer是什么有什么作用它与zygote的关系是什么 ActivityManagerService是什么什么时候初始化的有什么作用 Launcher是什么什么时候启动的 Instrumentation是什么和ActivityThread是什么关系 如何理解AMS和ActivityThread之间的Bi