Android Training Note】的更多相关文章

版本适配 Tip:为了能在几个Android版本中都能提供最好的特性和功能,你应该在你的app中使用Android Support Library,它能使你的app能在旧平台上使用最近的几个平台的APIs. 适配不同的系统版本俩种方法: 指定最小和目标API级别,具体来说,<uses-sdk> 元素中的 minSdkVersion和 targetSdkVersion属性,标明在设计和测试app时,最低兼容API的级别和最高适用的API级别(这个最高的级别是需要通过你的测试的).随着新版本And…
1.使用AsyncTask異步加載bitmap圖片避免OOM: class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; private int data = 0; public BitmapWorkerTask(ImageView imageView) { // Use a WeakRefe…
http://hukai.me/android-training-managing_your_app_memory/ Random Access Memory(RAM)在任何软件开发环境中都是一个很宝贵的资源.这一点在物理内存通常很有限的移动操作系统上,显得尤为突出.尽管Android的Dalvik虚拟机扮演了常规的垃圾回收的角色,但这并不意味着你可以忽视app的内存分配与释放的时机与地点. 为了GC能够从app中及时回收内存,我们需要注意避免内存泄露(通常由于在全局成员变量中持有对象引用而导致…
发表在我的独立网站http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-0/ ,欢迎访问! Android的framework有大量的Views用来与用户进行交互并显示不同种类的数据.但是有时候你的程序有个特殊的需求,而Android内置的views组件并不能实现.这一章节会演示如何创建你自己的views,并使得它们是robust与reusable的. Dependen…
发布在我的网站:http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-2/ , 欢迎访问! 自定义view的最重要的一个部分是自定义它的外观.根据你的程序的需求,自定义绘制动作可能简单也可能很复杂.这节课会演示一些最常见的操作. Override onDraw() 重绘一个自定义的view的最重要的步骤是重写onDraw()方法.onDraw()的参数是一个Canvas…
Remembering Your User[记住你的用户] 每一个人都非常喜欢自己的名字能被人记住.当中最简单,最有效的使得你的app让人喜欢的方法是记住你的用户是谁,特别是当用户升级到一台新的设备或者是在tablet希望能够像在手机上一样使用(存有相同的数据,比方书签等).可是怎样知道用户是谁,怎样在新的设备上识别出他们. 对于很多程序来说,能够使用AccountManager APIs来处理上面的问题.在用户授权下,你能够使用AccountManager来获取用户存储在设备上的账户名. 整合…
原文:http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html 图片缓存 在Android开发中,加载一个图片到界面很容易,但如果一次加载大量图片就复杂多了.在很多情况下(比如:ListView,GridView或ViewPager),能够滚动的组件需要加载的图片几乎是无限多的. 有些组件的child view在不显示时会回收,并循环使用,如果没有任何对bitmap的持久引用的话,垃圾回收器会释放你加载的…
使用Volley传输网络数据(Transmitting Network Data Using Volley) Volley 是一个 HTTP 库,它使得在Android应用程序中操作网络更容易,是重要的,更多快速的.Volley 属于“开放源代码项目”.. Volley 提供了下列好处: 自动化的网络请求调度安排. 多并发的网络连接. 对标准HTTP 透明化的硬盘和内存 响应缓存.   cache coherence. 支持请求的优先级. 支持终止请求的 API. 你可以终止一个单独的请求,或者…
你应该开始编写和启动测试作为你的android程序开发周期的一部分.写的好的测试能够帮助你更早的发现bug和使你对你的代码有信心. 一个测试用例定义了一些对象和方法的集合,用于启动多样的彼此独立的测试.测试用例可以被组织进测试套件内和启动编程,以一个可重复的规则,测试框架提供了测试启动的方式. 这节课将会教你如何使用android的自定义测试框架(基于流行的Junit框架).你可以编写你的测试用例来验证你程序里的指定行为,和检查在不同的android设备中的一致性表现.你的测试用例也可以作为一种…
2014-10-28 张云飞VIR 翻译自:https://developer.android.com/training/basics/actionbar/index.html 添加活动栏(Adding the Action Bar) 译者注:我找不到更好的词汇翻译action bar,虽然我也认为 活动栏 不是个好的翻译,但总要有个中文名字.不过为了方便识别,本文仍继续使用英文的actionbar 活动栏action bar 是非常重要的设计元素之一,你可以为你的app中的activity来实…
本文翻译自:https://developer.android.com/training/basics/firstapp/index.html 构建你的第一个应用(app) 欢迎来到安卓开发! 这个课程教你如何构建你的第一个应用.你讲会学到如何去创建一个安卓工程和启动一个可以调试的应用的版本.你将会学到一些安卓设计的基础,包括如何构建一个简单的用户界面和处理用户输入. 在你开始这个课程之前,确保你已经有了安卓开发环境并设置好,你需要: 1.下载安卓开发包(Android SDK) 2.为你的Ec…
视频讲解:http://www.eyeandroid.com/thread-15896-1-1.html 由于很多应用程序都可以播放音频,因此在播放前考虑它们如何交互就显得很重要了,为了避免同时出现多个声音,Android使用音频焦点(AudioFocus)来控制音频的播放 - 仅仅是获取到Audio Focus的应用程序才能够播放音频. 在应用程序开始播放音频之前,它需要经过发出请求[request]à接受请求[receive] à音频焦点锁定[AudioFocus]的过程.同样它需要知道如何…
主要内容:1 鉴别使用的是哪个音频流2 使用物理音量键控制应用程序的音量 3 使用物理播放控制键来控制应用程序的音频播放 视频讲解:http://www.eyeandroid.com/thread-15877-1-1.html 控制应用程序的音量和音频的播放 一个好的用户体验是可预期可控的.如果应用程序是在播放音频,那么显然我们需要做到能够通过硬件按钮.软件按钮.蓝牙耳麦等来控制音量. 同样的,我们需要能够监听Media Button发出的播放.停止.暂停.跳过.上一首等动作,并且在应用程序所使…
在2.3.3及以下版本: 通過定義兩個整形變量來檢測bitmap是否display過或者已經在緩存中 下面的代碼當bitmap滿足兩個條件就被回收掉: 1. 兩個整形變量都變為0 2. bitmap不為null並且還沒有被回收掉 private int mCacheRefCount = 0; private int mDisplayRefCount = 0; ... // Notify the drawable that the displayed state has changed. // K…
在3.0上的實現 <resources> <!-- the theme applied to the application or activity --> <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo"> <item name="android:windowActionBarOverlay">true<…
Navigation Up(ActionBar中的上级菜单导航图标) 在android 4.0中,我们需要自己维护activity之间的父子关系. 导航图标ID为android.R.id.home @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // This is called when the Home (Up…
Android 设备管理 Android2.2 通过Android设备管理API提供对企业级应用的支持.设备管理API在系统级别提供了设备管理特性.这些API可以在企业环境下,需要对员工设备进行控制时使用.例如,内置的Android邮件应用有新API对Exchange进行支持.通过邮件应用,Exchange管理员可以实施一个覆盖不同设备的密码策略——包括字母数字密码或PIN码.管理员也可以远程清除那些遗失或被盗的手机数据(恢复出厂默认设置).Exchange用户可以同步他们的邮件和日历数据. 本…
发布在我的网站 http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-1/ ,欢迎访问! 设计良好的类总是相似的.它使用一个好用的接口来封装一个特定的功能,它有效的使用CPU与内存,等等.为了成为一个设计良好的类,自定义的view应该: 遵守Android标准规则. 提供自定义的风格属性值并能够被Android XML Layout所识别. 发出可访问的事件. 能够兼容…
Building Apps with Content Sharing Simple Data --> Intent && ActionProvider 介绍如何让应用程序共享简单的数据,如:文本/URI/图片等 1. Sending Simple Data to Other Apps 2. Receiving Simple Data from Other Apps 3. Adding an Easy Share Action Sharing Files 介绍Android中的分享文件…
高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如果你不小心,位图可以快速消耗可用的内存预算而导致应用程序崩溃,引发可怕的异常: java.lang.OutofMemoryError: bitmap size exceeds VM budget. 下面是一些 为什an么在你的Android应用程序加载位图是棘手的原因 : 移动设备通常拥有受限的系统…
NFC 基础 本文档介绍了在Android上的基本的NFC任务.它说明了如何发送和接收的NDEF消息(NDEF messages)的形式的表单里包含的NFC数据(NFC data),并介绍Android框架里支持这些功能的API.对于更高级的主题,包括与非NDEF数据的讨论,请参阅高级NFC. 当使用NDEF 数据和Android时,有两个主要的使用场景: •从一个NFC 标签里读取NDEF 数据 •使用 Android Beam™ 快速传输Beaming NDEF messages从一台设备到…
又重新开始学习android开发了,希望这次不是三分钟热度.之前是利用eclipse+ADT来开发的,官网上建议用Android Studio.刚好重装了系统,升级了内存.于是下个studio来学学. 目标是在手机上成功运行个hello world的程序,并回顾以前学习的. 一.利用android studio搭建环境 1.下载JDK并安装 参考之前的博客 http://blog.csdn.net/h2008066215019910120/article/details/41308783 2.下…
1.中文乱码 很多同学都安装了Android Studio,但是发现中文是乱码,其实这个很好解决的.在IDE里点击File,选择Settings...快捷键是Ctrl+alt+s 在打开的窗口中,找到IDE Settings下的Appearance,在右侧勾选上“Override default fonts by”,然后在第一个下拉框中选择字体为“simsun”,然后apply,重启IDE,就好了…
AsyncTask 实现原理 AsyncTask是Android提供的轻量级异步类,可以直接继承AsyncTask在类中实现异步操作,并提供接口反馈当前的异步执行程度(通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用优点 1.简单快捷的实现异步操作 2.过程可控 使用的缺点: 1.在使用多个异步操作并需要进行UI变更时会变得复杂 Handler 实现原理 在Handler异步实现时,涉及到Handler, Looper, Message, Thread四个对象, 实现异步的流程…
用户在播放音乐的时候有多个选择,可以使用内置的扬声器,有线耳机或者是支持A2DP的蓝牙耳机.(补充:A2DP全名是Advanced Audio Distribution Profile 蓝牙音频传输模型协定, A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度.有A2DP的耳机就是蓝牙立体声耳机.声音能达到44.1kHz,一般的耳机只能达到8kHz.如果手机支持蓝牙,只要装载A2DP协议,就能使用A2DP耳机了.还有消费者看到技术参数提到蓝牙V1.0 V1.1 V1.2 V2.0——这…
讀取Bitmap對象實際的尺寸和類型 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), R.id.myimage, options); int imageHeight = options.outHeight; int imageWidth = options.outW…
判断有处理Intent的Activity PackageManager packageManager = getPackageManager(); List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0); boolean isIntentSafe = activities.size() > 0; // Start an activity if it's safe if (isInt…
各DPI图片倍率 xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (baseline) ldpi: 0.75 这就意味着如果有一张xhdpi下200*200的图片, 你应该提供同样的图片资源150*150大小针对hdpi, 100*100大小针对mdpi, 75*75大小针对ldpi…
写在http://hukai.me/blog/android-training-volley-index/…