Allen's Blog

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


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

关于 Android 中的 HTTP Clients

发表于 2016-02-27   |   分类于 Android 网络   |  

本文翻译自 Google Dalvik 虚拟机团队 Jesse Wilson 的 Android’s HTTP Client

绝大多数 Android app 都会用 HTTP 来进行网络连接,已达到收发数据的目的。 Android 中有两个 Http 使用类,分别是:

  • 1.HttpURLConnection.
  • 2.Apache 的 HTTP Client.

这两种都支持 HTTPS,上传,下载,超时配置,IPv6 和连接池。

Apache HTTP Client

DefaultHttpClient 和他的兄弟类 AndroidHttpClient 对于 web 浏览器拓展性非常好。它们拥有庞大的,弹性很好的 API 供我们使用。且它们稳定性极高,很少存在 bug.

但是如此大量的 API,在我们不破坏其兼容性的前提下,很难去对其拓展。这也是为什么 Android 团队为何不喜欢 Apache HTTP Client 的原因。

阅读全文 »

通过 Android Studio 远程调试真机

发表于 2016-02-25   |   分类于 开发工具   |  

本文转自 http://www.finalshares.com/read-5498)

还在为找不到目标真机发愁,今天在逛 极分享 的时候,看到一篇比较好的文章,觉得对我们Android开发作用很大,就转了过来。接下来我们就来看看原文。

之前用了很久的模拟器,今天给大家分享一个不用模拟器,在没有手机的情况下,如何实现真机 debug 的教程,第一次发教程贴,望支持哈,非喜勿喷哈!
废话少说,先睹为快。在不用数据线连接手机的情况下,我先来个打断点截图。

实现步骤

首先,准备工作做好,需要借助如下这个辅助工具。

阅读全文 »

Android项目编码规范

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

本文翻译自 GitHub 上一篇个人认为比较好的 Android 项目规范文档: https://github.com/ribot/android-guidelines/blob/master/project_and_code_guidelines.md

每个项目都应该有编码规范,俗话说的好:”无规矩不成方圆”。没有编码规范的项目,恩,谁维护谁知道…反正我是深有体会。废话少说,本篇博文将会从几大模块介绍作为一个 Android 开发人员,应该遵循的。

文件命名

类命名

继承自某一组件的 java 类的命名方式因该以该组件为后缀,比如 SignInActivity, SignInFragment, ImageUploaderService, ChangePasswordDialog.

资源文件

资源文件应以下划线 _ 来分割。

阅读全文 »

初探 Android 中的 MVP 模式

发表于 2016-02-20   |   分类于 Android 架构   |  

本文将会为你介绍什么是 MVP 模式,以及它的长处,并从一个demo入手。

MVP 使用起来真的简单吗?为何要使用它?

什么是 MVP 模式?

  • View 层 用来展示数据以及反馈用户操作。在Android中,此层级包括 Activity, Fragment, android.view.view.View 抑或者是一个 Dialog.
  • Model 层 数据接入层,包括连接本地数据库,或者从服务器拿数据。
  • Presenter 层 view 层和 model 层通信的中介,也就是说view想要展示数据,它需要找 Presenter 来拿,而 Presenter 会去调用 Model 层。Presenter 也被用来处理后台任务。

简单来说,使用 MVP 模式,可以让你的 activity, view, fragment 更加专注于 UI 相关,将业务逻辑剥离出来。这样可以使你的项目低耦合,高内聚,项目更易维护,可靠性倍增,拓展起来更爽。

阅读全文 »

你还在写导致 context 内存泄露的代码吗?

发表于 2016-02-18   |   分类于 Android 性能优化   |  

本文翻译自: http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html

作为一个 Android 程序员,一定对下面这段代码很是熟悉:

1
2
3
4
5
6
7
8
9
public class SampleActivity extends Activity {

private final Handler mLeakyHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// ...
}
}
}
阅读全文 »

Android 中的 AsyncTask

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

Overview

AsyncTask 能够让我们不用操作 threads 和 handlers 的情况下,在 UI 线程中方便的执行耗时操作,并且返回结果到 UI 线程。

AsyncTask 理论上被用来执行 短时(通常情况下,只需几秒的操作)的操作。如果你需要长时间的执行某一操作,强烈推荐你使用 java.util.concurrent 包下的 Executor, ThreadPoolExecutor 和 FutureTask.

你在定义AsyncTask时需要定义三个泛型参数:

  • Called Params - 传入的参数
  • Progress - 执行中的参数
  • Result - 返回值参数

4 个方法:

  • onPreExecute()
  • doInBackground()
  • onProgressUpdate()
  • onPostExecute()
    阅读全文 »

关于 Android 中工作者线程的思考

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

本文转自 http://www.infoq.com/cn/articles/android-worker-thread

在Android中,我们或多或少使用了工作者线程,比如Thread,AsyncTask,HandlerThread,甚至是自己创建的线程池,使用工作者线程我们可以将耗时的操作从主线程中移走。然而在Android系统中为什么存在工作者线程呢,常用的工作者线程有哪些不易察觉的问题呢,关于工作者线程有哪些优化的方面呢,本文将一一解答这些问题。

工作者线程的存在原因:
  • 因为Android的UI单线程模型,所有的UI相关的操作都需要在主线程(UI线程)执行
  • Android中各大组件的生命周期回调都是位于主线程中,使得主线程的职责更重
  • 如果不使用工作者线程为主线程分担耗时的任务,会造成应用卡顿,严重时可能出现ANR(Application Not Responding),即程序未响应。

因而,在Android中使用工作者线程显得势在必行,如一开始提到那样,在Android中工作者线程有很多,接下来我们将围绕AsyncTask,HandlerThread等深入研究。

阅读全文 »

Android 中的进程和线程

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

当android应用启动第一个组件后,系统会自动为这个分配一个新的Linux进程,这个进程中包含一个执行线程。默认情况下,同一个应用中的所有组件都运行在这个包含着主线程的进程中。也就是说,在创建一个新的组件时,系统还是会把它运行在已经分配好的这个进程中。当然,你也可以指定这些组件运行在不同的进程中,同时,你还可以为他们创建额外的线程。

这篇博文,我们就来说说在Android应用中,进程和线程是如何来工作的。

进程

前面已经说了,同一个应用中的所有组件都被分配在同一个进程中,而且你也不应该去改变这种做法。然而,如果你需要控制某一确定的组件的Proces,你可以在manifest文件中做特殊设置。Music播放器的Playback Service就可以这样做.

manifest文件中记录着所有组件的节点,包括 <activity>,<service>,<receiver>和<provider>.在这些节点中,你可以通过 android:process 属性来指定这些组件应该运行在哪个进程中。你也可以通过 android:process 将不同应用中的组件都运行在同一个进程中,这样它们就会拥有同一个Linux用户ID,并且用相同的证书签名。

阅读全文 »

【Guitar 弹唱】连衣裙

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

宋冬野-《连衣裙》


阅读全文 »

Android 自定义控件(四)

发表于 2016-02-07   |   分类于 Android 自定义控件   |  

前几篇博文我们已经了解如何创建设计良好的View,并且能够使之在手势与状态切换时得到正确的反馈。下面要介绍的是如何使得view能够执行更快。为了避免UI显得卡顿,你必须确保动画能够保持在60fps。

去除冗余的代码

为了加速你的view,对于频繁调用的方法,需要尽量减少不必要的代码。先从onDraw开始,需要特别注意不应该在这里做内存分配的事情,因为它会导致GC,从而导致卡顿。在初始化或者动画间隙期间做分配内存的动作。不要在动画正在执行的时候做内存分配的事情。

你还需要尽可能的减少onDraw被调用的次数,大多数时候导致onDraw都是因为调用了invalidate().因此请尽量减少调用invaildate()的次数。如果可能的话,尽量调用含有4个参数的invalidate()方法而不是没有参数的invalidate()。没有参数的invalidate会强制重绘整个view。

阅读全文 »
1234…6
江冰

江冰

有一种难事叫坚持

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