自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嘻哈包袱铺 专栏

github开源项目 https://github.com/GeekGhost/Ghost

  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 Andriod 使用MediaPlayer播放音频文件

静态构造方法方法名称描述public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder)指定从资源ID对应的资源文件中来装载音乐文件,同时指定了SurfaceHolder对象并返回MediaPlyaer对象

2017-01-20 11:24:25 305

原创 java堆栈类使用实例(java中stack的使用方法)

java中stack的使用方法,堆栈是一种"后进先出"(LIFO) 的数据结构, 只能在一端进行插入(称为"压栈") 或删除 (称为"出栈")数据的操作,下面看示例吧JAVA 中,使用 java.util.Stack 类的构造方法创建对象。 public class Stack extends vector 构造方法 : public Stack() 创建一个空 Sta

2017-01-18 17:03:52 1020

原创 runOnUiThread更新主线程

更新UI采用Handle+Thread,需要发送消息,接受处理消息(在回调方法中处理),比较繁琐。除此之外,还可以使用runOnUiThread方法。 利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 

2017-01-18 15:36:59 519

原创 github常遇问题 push到github时,每次都要输入用户名和密码的问题

问题在github.com上 建立了一个小项目,可是在每次push 的时候,都要输入用户名和密码,很是麻烦 原因原因是使用了https方式 push 这种方式产生的原因,一般是我们clone是一定是使用了http的方式 例如我们在github上创建了一个项目,然后我们clone到本地时使用了http而非git 我们可以看到右端的项目地址,默认

2017-01-18 11:08:25 11478 1

原创 利用Nexus来构建企业级Maven仓库

Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块间的高效依赖开发。发现问题虽然你可以通过中央仓库来获取你所需要的jar包,但是现实往往是存在很多问题:问题1网速慢,你可能需要花很长的时间来下载你所需要的jar问题2如

2017-01-17 21:47:29 340

原创 Android Studio系列教程六--Gradle多渠道打包

由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了。友盟多渠道打包废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段:meta-data android:name="UMENG_CHANNEL" a

2017-01-17 10:49:33 267

原创 Android本地App与html5的交互

介绍:Android的开发中除了本地app的处理外,有时需要与html5的交互,与html5的交互无非两种情况。1:html5调用app本地的方法。例如,在一个网页上点击一个分享按钮控件,这时会弹出本地原生的一键分享界面,通过html5调用本地方法将值传给本地分享所需的值。2:app调用html5的javaScript方法。同样是分享,例如,在app上原生界面上点击分享按钮

2017-01-17 10:36:37 585

原创 HttpClient和HttpURLConnection的区别

HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等, HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便HttpClient实际上是对Java提供方法的一些封装,在HttpURLConnection中的输入输出流操作,在这个接口中被统一封装成了HttpPost(HttpGet)和HttpResp

2017-01-17 10:28:10 316

原创 Android系统中Parcelable和Serializable的区别

进行Android开发的时候,我们都知道不能将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。通过Android的API,我们知道有两种选择,即在传递对象时,需要对我们的对象进行 Parcelable 或者Serializable化。作为Java开发者,相信大家对Serializable 机制有一定了解,

2017-01-17 10:17:59 275

原创 Android IPC机制 ContentProvider进行进程间通信

前言ContentProvider为存储和获取数据提供统一的接口,它可以在不同的应用程序之间共享数据,本身就是适合进程间通信的。ContentProvider底层实现也是Binder,但是使用起来比AIDL要容易许多。系统也预制了很多的ContentProvider,例如通讯录,音视频等,这些操作本身就是跨进程进行通信。这篇文章主要是我们来自己实现用ContentProvider来进行进程

2017-01-16 18:28:06 311

原创 Android的IPC机制—— Messenger的使用及源码分析

在前面几篇中我们详细的介绍了AIDL的使用及原理。在这里我们感觉到AIDL的在使用过程中还是比较复杂的,那么有没有一种简单的方法来实现进程间的通信呢?当然是有的,那就是利用Messenger。Messenger翻译为信使,从他的名字就可以看出这个Messenger就是作为传递消息用的。那么我们就来看一下这个Messenger到底是如何使用的,以及在它内部是如何实现的。Messenger的使

2017-01-16 18:16:17 425

原创 Android IPC 文件共享

共享文件也是一种不错的IPC方式,两个进程通过读写同一个文件来交换数据,比如A进程把数据写入文件,B进程通过读取文件来获取数据。由于Android基于Linux,所以并发读写没有什么限制,甚至线程同时读写文件都可以,尽管会出现问题。利用这个思想,我们可以序列化一个对象到文件系统中,同时另一个进程中回复这个对象。还是以上一个工程为例:在MainActivity添加以下代码:

2017-01-16 17:45:32 374

原创 Android IPC方式 Bundle实现

android前面介绍了Android的IPC机制,现在我们通过Bundle实现他的IPC机制,后面会相继介绍不同的跨进程通信方式场景:手机上存在两个应用,现在需要通过应用A的Activity跳转到应用B的Activity中并传递数据,从而实现进程间通信1.首先创建两个应用A,与应用B应用A的Activity如下[java] view plain

2017-01-16 17:37:07 292

转载 Android组件化开发实践

Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情,短则一两分钟,长则达到五六分钟。Android studio推出instant run由于各种缺陷一般情况下是被关闭的……组件化开发可以有效降低代码模块的耦合度,使代码架构更加清晰,同时模块化的编译可以有效减少编译时间,当然总的编译时间是不会减少的,只是App模块化之后开发某个模块时,只需要编译特定模块,可以快速编译调试。

2017-01-15 18:54:59 1938

原创 版本管理

最近经常有人问我, 如何管理Gradle版本, 我来统一讲解这些小技巧.随着Android开发的成熟, 模块越来越多, 为了开发稳定的程序, 引入的库也随之增加, 如何确保所有项目使用相同的编译版本库版本呢?当然, Gradle的参数配置可以帮我们实现这些.Gradle主要(1) 常用库的展示与配置.(2) 统一管理项目和库的版本.(3) 设

2017-01-15 18:45:20 292

原创 版本控制—使用Gradle自动管理应用程序版本

我们在开发App时,通常在项目的Release阶段我们需要设置应用的版本号和版本名称,也就是设置下面两个属性versionCode versionName版本号其中versionCode的值是int类型,主要作用就是作为应用内部的版本编号,为版本升级提供唯一的标识,通常设为是自增的,假如当前app的versionCode为1,下一代app的versionCode

2017-01-15 18:43:04 495

原创 代码技巧1监听器从子线程切换主线程

举个例子:在请求一个接口或者进行IO处理的时候,因为这都属于耗时行为,所以都要放到子线程中去,当处理完毕的时候,通常会回调一个接口,因为接口是在子线程中回调的,所以在回调的地方如果直接操作主线程中的控件会造成BUG。这个BUG我就不贴了。今天看FilerDownloader源码的时候,发现了一个巧妙的写法,就是在接口回调用也定义一个静态内部类,类中的方法就是接口中的方法,然后通过Handl

2017-01-12 16:57:15 726

原创 代码整洁之道笔记(三)

C1不恰当的信息: 让注释传达本该更好地在源代码控制系统、问题追踪系统或者任何其他记录系统中保存的信息,是不恰当的。例如修改历史记录只会用大量过时而无趣的文本搞乱源代码文件 。通常,作者、最后修改时间、SPR数等元素不该在注释中出现。注释只该描述有关代码和设计的技术性信息。但是对于一个类的注释我觉得有必要增加作者信息,特别是针对SDK,这样的话可以让人了解到谁开发的这个系统,后续维护十分有

2017-01-11 17:03:03 325

原创 代码整洁之道笔记(二)

第四章(注释) 简单函数的注释完全没有必要,可以从方法名以及返回值命名入手。来清楚表达该函数的作用。可以去看一下,我们现在大部分注释都是这类注释。TO-DO的重要性,如果你在编写某个函数的时候,觉得有些问题没有想清楚,一定要加上 TO-DO注释,告知将来这里会做什么对于注释掉的代码可以直接删除掉,我们可能会想,应该在将来会用到。但是我们现在有了SVN 等版本控制系统,完全不用担心代码找不回

2017-01-11 16:56:18 287

原创 代码整洁之道笔记(一)

第一章 (代码整洁的重要性) 好的代码,要注意的是: 去除重复代码提高表达力(达到让别人能够看懂,并且觉得,这段代码就是为了解决某个问题而生的)第二章(有意义的命名)简单规则 名副其实 变量、函数或者类的名称应该是已经答复了所有的大问题。它应该告诉你,它为什么会存在,它做什么事,应该怎么用。如果名称需要注释来补充,那就不算是名副其实了。举一个例子: 

2017-01-11 16:53:35 317

原创 Android面试 - 音频焦点(Audio Focus)

引子说 Audio Focus 前先说个很简单需求:来电时暂停正在播放的音乐,电话结束时恢复播放。看到这个需求,第一反应肯定是:监听用户来电状态,作相应操作。这里不多做介绍,这样做有个不好的地方就是需要隐私权限!这样做一点也不优雅。后来搜索时看到一篇分析文章:Android来电时停止音乐播放的流程(顺便说一嘴,这篇转载居然不注明出处!!)。文章里的分析很明确的指出,系统在框

2017-01-03 17:00:52 1028

转载 Android IPC 进程间通信 aidl

2、AIDL的使用如果对Android比较熟悉,那么一定使用过AIDL,如果你还不了解,那么也没关系,下面会使用一个例子展示AIDL的用法。我们使用AIDL实现一个跨进程的加减法调用1、服务端新建一个项目,创建一个包名:com.zhy.calc.aidl,在包内创建一个ICalcAIDL文件:[java] view plain cop

2017-01-03 16:43:03 327

原创 Android 面试题 - 线程间通信

Android是基于Java的,所以也分主线程,子线程! 主线程:实现业务逻辑、UI绘制更新、各子线程串连,类似于将军; 子线程:完成耗时(联网取数据、SD卡数据加载、后台长时间运行)操作,类似于小兵; 一、子线程向主线程发消息(Thread+handler): 1、主线程中定义Handler: Java代码  Handler mHandler = 

2017-01-03 16:03:52 1398

原创 Android 项目总结 ViewPager Indicator fragment内存优化过程

因前段时间做了个对内存和CPU要求特别严格的一个项目,场景是:ViewPager+Fragment+Indicator的一个节目库,因为期间遇到了很多坑,所以在此做一个总结,以便下次再遇到这样的坑可以一下子跳过去。好了,废话不多说。一开始看到项目需求的时候,是左右滑动的界面,因为之前做过类似需求,所以很想当然的采用了之前的那套代码方法。问题一ViewPager+Frag

2017-01-03 14:24:37 1415

Fragment保持状态的框架

刚开始使用fragment的时候,看到网上有很多例子都是说只要replace来切换界面,但是这个会有一个缺点,比如A界面是个列表,好不容易通过流量下载来了,然后切换界面,再次返回,由于使用replace,fragment就又重新创建界面导致,用户又得加载。现在这个Demo,就完美的解决了这个问题。这个是使用了add方法,可以保持fragment的状态。很有用的UI框架

2014-01-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除