29 June 2015

小米06月第四周工作记录


2015.06.29

git

使用git上传的一般流程,新建仓库,关联远端,本地新增,本地提交,上传至服务器。

某些时候想新增除*.class外的所有文件,可以编写vim .gitigore实现。

某些时候想新增除temp文件夹下的所有文件,可以先git add *新增所有,然后使用git rm -r --cached temp/从add缓存中删去这个文件夹。

git checkout -- readme.txt让文件回到最近一次commitadd时的状态。git checkout -- file命令中的--很重要,没有--,就变成了“创建一个新分支”的命令

谈通信

线程间消息就足以了,跨进程binder,另外os级别的socket也是很好选择。


2015.06.30

ctrl+shift+电源键 mac快速进入睡眠

Service学习

分为本地Service,远程Service.

Android在应用程序中启动另外一个已经安装的应用程序或系统程序。

intent.setComponent(new ComponentName(context, "com.mi.milink.sdk.service.MiLinkService"); )

启动方式:context.startService。Service生命周期:onCreate->onStart->onStartCommand->onDestroy.如果没有context.stopService,Service会一直运行。只要调用一次stopService()方法便可以停止服务,无论之前它被调用了多少次的启动服务方法。

启动方式:context.bindService。Service生命周期:onCreate -> onBind(只一次,不可多次绑定) -> onUnbind -> onDestory多个客户端可以绑定同一个服务,如果Service还未被启动,bindService()方法可以启动服务。

startService()bindService()两种模式是完全独立的。你可以绑定一个已经通过startService()方法启动的服务。在这种情况下,stopService不会停止服务,直到service被解除绑定。

在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。

AIDL(android inner descripe language)

负责Android中进程间通信的。

bind Service时需要一个ServiceConnection对象,在没有了解aidl用法前一直不知道它是什么作用,其实他就是用来在客户端绑定service时接收service返回的IBinder对象的。IBinderEntity binderEntity = AIDLService.Stub.asInterface(IBinder service)

android使用aidl通信流程图

HandlerThread ,想Handler不在主线程中handleMessage就用这个,不是一个一次性消耗品。除了UIThread,其他的线程实例化Handler时要使用Looper.prepare()初始化生成MessageQueue。使用HandlerThread可以简化这一流程,新建步骤如下:

创建一个HandlerThread,即创建了一个包含Looper的线程。

HandlerThread handlerThread = new HandlerThread("leochin.com");

handlerThread.start(); //创建HandlerThread后一定要记得start()

获取HandlerThread的Looper

Looper looper = handlerThread.getLooper();

创建Handler,通过Looper初始化

Handler handler = new Handler(looper);

通过以上三步我们就成功创建HandlerThread。通过handler发送消息,就会在子线程中执行。

如果想让HandlerThread退出,则需要调用handlerThread.quit();。

RemoteCallbackList<IxxxCallback> aidl服务端与客户端互相调用


2015.07.03

git 全部还原到服务器版本

git checkout -- *

打包成jar包时不要把Manifest.xml那些都打包进去,不然anroid studio 在build的时候会报 duplicate 的错误。


2015.07.04

return ip.matches("((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))");

mlink 重连逻辑优化


2015.07.06

git reset 只把本地的某次commit撤销掉。


2015.07.08

Object内部的clone()是被声明为protected的,外部无法使用。Objcet.clone()都是浅clone,对于数组,String外的对象都是只拷贝引用过去,指的内存还是同一块。

Cloneable 接口内没有实现任何方法,这个只是一个标记,如果没有实现这个接口,调用clone方法时会抛出 CloneNotSupportedException 异常。

可以实现一个构造方法传入一个自己的对象实现 clone 。如public A(A a)



blog comments powered by Disqus