Blog Archives

Android,google

Android网络通信库Volley简介

1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。 这是Volley名称的由来: a burst or emission of many things or a large amount at once 在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。见下图 其实,从这幅图,我们也可以看出来,Volley特别适合数据量不大但是通信频繁的场景。 1.1. Volley引入的背景 在以前,我们可能面临如下很多麻烦的问题。 比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdapter#getView()里开始图像的读取。 通过AsyncTask等机制使用HttpURLConnection从服务器去的图片资源 在AsyncTask#onPostExecute()里设置相应ImageView的属性。 而在Volley下,只需要一个函数即可,详细见后面的例子。 再比如,屏幕旋转的时候,有时候会导致再次从网络取得数据。为了避免这种不必要的网络访问,我们可能需要自己写很多针对各种情况的处理,比如cache什么的。 再有,比如ListView的时候,我们滚动过快,可能导致有些网络请求返回的时候,早已经滚过了当时的位置,根本没必要显示在list里了,虽然我们可以通过ViewHolder来保持url等来实现防止两次取得,但是那些已经没有必须要的数据,还是会浪费系统的各种资源。 1.2. Volley提供的功能 简单来说,它提供了如下的便利功能: JSON,图像等的异步下载; 网络请求的排序(scheduling) 网络请求的优先级处理 缓存 多级别取消请求

Posted in Android Tagged with: , , , , , ,

锤子OS(Smartisan os)有感

之前罗吹的很牛,心想他们真的能做出什么惊天动地的东西出来么?怀着怀疑与兴奋的心情,昨天晚上跟同事吃了一顿大餐,今天终于可以仔细看看老罗的锤子OS了。 以下观点完全根据个人喜好。 首先,我觉得好的地方 1. Launcher/实体图标 主画面因为没有壁纸,所以画面写的很简洁朴素 双指撮合,则进入 到36 宫格模式,显示4个抽屉画面。用户应该是可以直接进入到某一屏,某一应用,以及在各屏幕之间移动一个或者若干个图标。 听说还会有81宫格。。 此外,还有隐藏应用,锁定应用的功能。君子坦荡荡吧。 拟物式的图标?实体图标? 我不知道怎么称呼这种风格,简单来说就是HOME上的图标只有图标的主体内容,没有背景,没有边框。但是这样的话如何兼容第三方应用呢?第三方的app肯定设计风格参差不齐,放到屏幕上会是什么效果呢? 其实仔细看看上面的微博图标,就能看出些问题了。 2. 挥手消灭通知 通知很烦,滥发通知的应用很烦,80%的通知是没有用的。 不错,我是强迫症患者,我点,我点,我点点点。。。实在太累了,我就开始删,删,删删删;现在好了,手一挥,眼前立刻清净了。 不过我不会错删了通知导致漏看了吧。。。 3. 日历自动显示天气 除去流量的因素,还是挺有用的。 4. 字体 看着千篇一律的不太美观的字确实不是什么好感受,从罗演示的样子来看,着实好看。再现其设计主导的本色。 5. 听说系统不支持widget了 这个我双手赞同,我喜欢简单一致的风格,widget很是破坏了这种体验。 6. 亮度调节可以通过音量键快速调出 方便了不少,不多说了。 7. 通讯录 增加了按照地点、频率、添加时间进行排列检索等功能,按照通话频率排序的机制可以人为进行干预调整。 8. 拍照和录像按钮分开 这个很好,有时候打开相机抓拍,发现是摄像模式,很耽误时间。不过那个录像的图标,怎么感觉像很多电子设备的物理电源键的标识? 9. 随意手动调节屏幕旋转方向 任何情况下,两个大拇指即可调整屏幕方向,躺着的时候应该能用得到。

Posted in Android, Tech

howto do git replace

代码提交后,如果还要再改一次,如何修改? 首先在本地修改代码 再执行如下命令: git add ./ git commit –amend repo upload ./ –replace

Posted in Android

android的收彩信通知的过程解析

这里对froyo(非标准)里mms模块收彩信的函数调用关系进行一点解说。这里只说的是收到彩信,但是还没有下载(设为手工下载) 首先,mms是通过WAPPUSH实现的,具体在com.android.internal.telephony包里的WapPushOverSms类。 这个类里除了构造函数,另一个public的就是dispatchWapPdu()了 仔细查看下,就会找到dispatchWapPdu_MMS()这个函数 private void dispatchWapPdu_MMS(byte[] pdu, int transactionId, int pduType,                                     int headerStartIndex, int headerLength) {         byte[] header =

Posted in Android

XXX烧鸡步骤

1。关机,拔电池 2。按住相机按钮的同时按电源键 3。sudo ./fastboot devices 确认设备链接成功 4。sudo ./fastboot erase userdata 删除用户数据 5。sudo ./fastboot flash boot boot_xxx.img 烧写boot信息 6。sudo ./fastboot flast system system_xxx.img 烧写 system镜像

Posted in Android

如何让自己的应用在应用程序列表里排在前面

普通的android的home程序里的应用一览,应该是按照字母顺序升续排列的,不光是android,其它平台可能也类似,很多东西都有按字母排列这一功能,这也是angry bird起名的由来吧,a怎么排都靠前。那么我们自己的程序必须要遵守这个规则吗?如果用汉字岂不是要排到很后面去了? 答案是有小窍门,可以把你的“汉字”的应用名排到前面去,那就是修改app_name的值 先看看如何做吧,以应用汇为例 在values/string.xml里有如下代码 <resources>   <string name="app_name">\u0020掌上应用汇</string>   <string name="label">掌上应用汇</string> </resources> 怎么样,一下子就明白了吧,app_name前面应该是有个空格,这样可以保证这个程序甚至可以排到a开头的程序的前面 掌上应用汇做的比较巧妙

Posted in Android

用Handler也能同步操作

用Handler多数是为了异步操作,不阻塞UI线程的操作,可以防止ANR等。 今天看com.android.internal.telephony.gsm.SimSmsInterfaceManager的实现发现如下操作: Handler mHandler = new Handler() {         @Override         public void handleMessage(Message msg) {             switch (msg.what) {                 case EVENT_UPDATE_DONE:    

Posted in Android, Tech

从android的framebuffer里取图

在网上看到的 只需要如下命令即可: $ adb shell # cat /dev/graphics/fb0 > /sdcard/frame.raw 然后用FFMPEG转换为png $ IMAGE_RES=320×480 $ RAW_IMAGE=frame.raw $ OUT_IMAGE=frame-%d.png $ #Download the raw data $ adb pull /sdcard/$RAW_IMAGE . $ ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s $IMAGE_RES \ -i $RAW_IMAGE

Posted in Android Tagged with: ,

线程问题引起的内存泄露

最近解决的一个内存泄露,竟然是由于线程问题引起的 看看下面代码,如何? new Thread(new Runnable() {             public void run() {                 MessagingNotification.updateSendFailedNotificationForThread(ComposeMessageActivity.this, threadId);             }         }).run(); 有什么问题吗? 对,这段代码生成了一个thread的对象,竟然调用了run方法,这引起了内存泄露。 必须改为start才行。

Posted in Android Tagged with: , , , , , ,

activity的启动方式(launch mode)

在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: 1. 如何决定所属task “standard”和”singleTop”的activity的目标task,和收到的Intent的发送者在同一个task内,除非intent包括参数FLAG_ACTIVITY_NEW_TASK。 如果提供了FLAG_ACTIVITY_NEW_TASK参数,会启动到别的task里。 “singleTask”和”singleInstance”总是把activity作为一个task的根元素,他们不会被启动到一个其他task里。 2. 是否允许多个实例 “standard”和”singleTop”可以被实例化多次,并且存在于不同的task中,且一个task可以包括一个activity的多个实例; “singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。 singleTop要求如果创建intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。 3. 是否允许其它activity存在于本task内 “singleInstance”独占一个task,其它activity不能存在那个task里;如果它启动了一个新的activity,不管新的activity的launch mode 如何,新的activity都将会到别的task里运行(如同加了FLAG_ACTIVITY_NEW_TASK参数)。 而另外三种模式,则可以和其它activity共存。 4. 是否每次都生成新实例 “standard”对于没一个启动Intent都会生成一个activity的新实例; “singleTop”的activity如果在task的栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。 比如现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent,如果D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。 如果D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D 如果这时候给B发Intent的话,不管B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B。 “singleInstance”是其所在栈的唯一activity,它会每次都被重用。 “singleTask”如果在栈顶,则接受intent,否则,该intent会被丢弃,但是该task仍会回到前台。 当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法 如果收到intent生成一个activity实例,那么用户可以通过back键回到上一个状态;如果是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。

Posted in Android Tagged with: , , , , ,

无觅相关文章插件,快速提升流量