小米06月第四周工作记录 工作记录
小米06月第四周工作记录
2015.06.29
git
使用git上传的一般流程,新建仓库,关联远端,本地新增,本地提交,上传至服务器。
某些时候想新增除*.class
外的所有文件,可以编写vim .gitigore
实现。
某些时候想新增除temp文件夹下的所有文件,可以先git add *
新增所有,然后使用git rm -r --cached temp/
从add缓存中删去这个文件夹。
git checkout -- readme.txt
让文件回到最近一次commit
或add
时的状态。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)
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