Allen's Blog

当你的才华还撑不起你的野心时,你就应该静下心来学习


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

Android 中的 Service 类拓展和 IntentService 介绍

发表于 2016-04-18   |   分类于 Android   |  

IntentService 作为 Service 的子类,它能够将我们需要的操作放到 工作线程 进行处理。通过重写 onHandleIntent() 方法,此方法会自动处理我们发出的每一个 Intent,在工作线程中执行任务。

前言

众所周知,但我们想要启动一个 Service,需要在另一个组件中调用 startService(),从而调用 Service 中的 onStartCommand() 方法.

Service 拥有自己的生命周期,并可以在后台无限期的运行(和 Windows 中的 Service 很像)。

注意1:即使是调用者(启动服务的组件)被销毁,都不能影响 Service 的运行。我们需要在另一个组件中调用 stopService() 或者在服务中调用 stopSelf() 来停止服务。
注意2:我见到到一些 Android 开发人员,因为对 Service 不熟悉,想当然的认为每当我们启动了一个 Service,也就意味了开了一个子线程,这种想法是错误的。
实际情况是:默认情况下,服务和服务声明的应用运行在同一个进程中,而且运行在主线程中。所以说,如果 Service 需要处理一些耗时操作,我们需要在 Service 中开启一个工作线程来处理这些任务。

这里有两种 Service 供我们使用:

阅读全文 »

Android ListView 常用技巧总结

发表于 2016-04-11   |   分类于 Android   |  

本文对 ListView 中的一些常用技巧做一个总结。附:虽然现在 RecyclerView 已逐渐取代 ListView,但实际情况是大部分项目中还在使用 ListView。当然,后续我会在我的博客中详细介绍 RecyclerView,敬请期待。

前言

ListView 作为 Android 中常用的列表控件,用以向用户展示列表信息。可以说,我们开发的项目中 listView 随处可见,也是 Android 程序员面试时,最常被问的一个知识点,下面我就将 listView 中的常用技巧一一罗列出来。

listView 的缓存机制以及 ViewHolder 的使用

这两个知识点是最常用的优化 listView 的技巧。

1.首先,来说说 listView 的缓存机制,再这之前,我们先看看下面这张图:

我先来说一下这张图的意思,从左边第一张图开始,当我们的手机上显示一个 listView 列表的时候,如图有 7 个 item,当我们向上拖动 listView,进入第二个示意图,注意细节,第二个图例表示的是,当向上拖动时,这是 item00 正准备消失在手机屏幕上但还没有完全消失时,item07 出现在我们的视野内,这时,item07 也只是显示一半,这种情况下,item07 还不是从缓存中复用的 item,而是重新 new 的一个 View.我们继续向上拖动,到了第三个图例,这时 item00 已经完全消失在屏幕上,这时系统不会销毁这 item00,而是将其放到了缓存中,那么当我们继续向上滑动时,我们就可以利用 listView 的 缓存机制,复用缓存中 item,用它显示 item08,而不是再次的重新 new 一个.

阅读全文 »

Android 注解框架之 ButterKnife

发表于 2016-04-07   |   分类于 Android 开发框架   |  

ButterKnife(黄油刀) 是大名鼎鼎的 JakeWharton大神 所写的注解框架,目的是为了将我们从大量的 findViewById() 和 监听类中解脱出来,从而将更多的关注点在业务需求上。

前言

ButterKnife 是一个通过注解的方式将 变量 和 方法 与 Android 视图绑定的框架。

使用 ButterKnife,我们能够:

  • 通过 @BindView 替代大量的 findViewById();
  • 在 list 和 array 中组织多个视图,并能够即时通过 actions, setters 或者 properties 来操作它们;
  • 通过 @OnClick 或别的注解方式来替代大量的监听内部类;
  • 通过资源注解替代资源查询。

下面一节我们具体细说。

阅读全文 »

说说 Android Studio 下载完成后,我们需要知道的事情

发表于 2016-04-02   |   分类于 Issues Resolution   |  

我在之前有两篇介绍 Android Studio 的博文,分别是 《Android Studio 概览》 和 《再说说 Android Studio》,但这两篇基本上都是介绍 Android Studio 的功能,今天这篇将会说说,当我们将 Android Studio 下载完成后,需要对 AS(下面均简称为 AS) 做的配置,以便我们能够方便高效的使用这个开发工具.

注意:本文后续建立在你已经下好了 AS,且能够正常启动.(至于如何下载,这没什么好说的,自行 Google,百度即可 …)

1.Gradle 配置文件下载耗时太长的问题

当我们第一次启动 AS,并点击 “Start a new Android Studio project” 的时候,AS 会自动去下载 Gradle 相关的配置文件,默认下载完成后放置位置在 C:\User\Administrator.gradle 下的 C:\Users\Administrator\gradle\wrapper\dists\gradle-2.1-all\27fdsaorewru2342dsjon45 文件夹,也许你会疑问这一串数字和英文组合的文件夹是什么意思,其实它是随机生成的。

我们打开这个文件夹,可以看到 gradle-2.1-all.zip 的 .part 文件。拿到这个版本号,我们可以通过第三方下载软件(例如迅雷)去 Google 官方网站去下载。

下载好 gradle-2.1-all.zip 文件好,无需解压,放到这个奇怪的文件夹下,AS 运行的时候会自动解压。这样就可以为我们节省了很多时间了,再次创建工程的时候只需要下载一些 jcenter 的依赖包即可,而这些文件都很小,不会花费多长时间。

阅读全文 »

关于 Genymotion 中启动下载好的虚拟设备报错:Unable to start the virtual device. VirtualBox cannot start the virtual device.

发表于 2016-03-28   |   分类于 Issues Resolution   |  

问题出现场景:最近在新机器上装上 Genymotion 后,启动下载好的虚拟设备,老是报错,启动失败。

问题详情

因为当时没有截图报错的 Dialog,下面就手打出具体的错误信息:

Unable to start the virtual device.
VirtualBox cannot start the virtual device.
To find out the cause of the problem, start the virtual device from VirtualBox.
For more information, check the log files. Please refer to: https://www.genymotion.com/#!/support?chapter=collapse-logs#faq

阅读全文 »

关于如何运用命令行操作 Android 真机上的 SQLite 数据库

发表于 2016-03-22   |   分类于 Android SQLite   |  

场景:今天在对 sqlite 数据库中的某张表进行查询时,发现查询到的数据总是为空,但是,我非常肯定表中是有数据的,所谓口说无凭,需要真正确认才能定论,于是就需要查 sqlite 数据库,但是真机的 .db 文件无法通过 DDMS 导出,也就无法运用第三方 sqlite 客户端打开 .db 文件来查询数据了。

这篇博文就来说说如何运用命令行来对真机上的 sqlite 数据库文件进行操作:

  • 第一步 : 打开 cmd (Windows 系统),切换至
1
adb shell
  • 第二步 : 定位到你 app 的数据库文件所在目录:
1
cd data/data/com.example.demo/databases
阅读全文 »

【Guitar 弹唱】 董小姐

发表于 2016-03-15   |   分类于 音乐   |  

宋冬野 - 《董小姐》


阅读全文 »

Android View 小结

发表于 2016-03-10   |   分类于 Android   |  

文本对于 Android View 的总结比较简洁易懂,转过来与大家一起分享。
原文地址:http://threezj.com/2015/12/17/Android%20View%E8%AF%A6%E8%A7%A3/

关于 Android View 控件

Android 中控件大致被分为两类 ViewGroup,View。ViewGroup 作为容器管理 View。 Android 视图,是类似于 Dom 树的架构。父视图负责测量定位绘制等操作。我们经常在用的 findViewById 方法代价昂贵的原因,就是因为他负责至上而下遍历整棵控件树,来寻找 View 实例,在重复操作中尽量少用。现在在用的很多控件都是直接或者间接继承自 View 的,如下图:


阅读全文 »

【Guitar 弹唱】 秋意浓

发表于 2016-03-02   |   分类于 音乐   |  

还记得星爷唱的那首李香兰吗? :-D


阅读全文 »

Android Touch 事件传递机制

发表于 2016-02-29   |   分类于 Android   |  

本文转自 Trinea大牛的 《Android Touch事件传递机制》

基础知识

(1) 所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多指触摸)等。

(2) 事件类型分为:

  • ACTION_DOWN
  • ACTION_UP
  • ACTION_MOVE
  • ACTION_POINTER_DOWN
  • ACTION_POINTER_UP
  • ACTION_CANCEL

每个事件都是以ACTION_DOWN 开始 ACTION_UP 结束。

(3) 对事件的处理包括三类,分别为:

  • 1.传递:dispatchTouchEvent()函数
  • 2.拦截:onInterceptTouchEvent()函数
  • 3.消费:onTouchEvent()函数和 OnTouchListener
    阅读全文 »
123…6
江冰

江冰

有一种难事叫坚持

53 日志
18 分类
33 标签
RSS
GitHub Weibo
Creative Commons
© 2015 - 2016 江冰
由 Hexo 强力驱动
主题 - NexT.Mist