
移动开发_android
文章平均质量分 83
manoel
这个作者很懒,什么都没留下…
展开
-
【移动开发】startForeground()让服务保持前台级别
最近在使用android 4.1系统的时候,发现在手机休眠一段时间后(1-2小时),后台运行的服务被强行kill掉,有可能是系统回收内存的一种机制,要想避免这种情况可以通过startForeground让服务前台运行,当stopservice的时候通过stopForeground去掉。以下是android官方描述:Running a Service in the ForegroundA foreg原创 2014-10-15 17:00:37 · 12233 阅读 · 1 评论 -
【移动开发】AIDL中callback的实现
AIDL实现就可以在客户端中调用服务端的方法,并传递数据到服务端,也可以服务端传递数据过来;但是如果要从服务端去调用客户端的方法,那么就需要注册callback! 抄自和源码:http://zxl-ong.iteye.com/blog/736888 前面的文件讲到用AIDL来实现进程间的通信,但是只讲到客户端调用服务端的方法,现在来看看服务端对客户端方法的调用callback!服务端对客户端的调用原创 2014-10-16 11:45:21 · 7620 阅读 · 0 评论 -
【移动开发】targetSdkVersion的作用
在AndroidMenifest.xml中,常常会有下面的语句: 在project.properties中,会看到下面的语句: target=android-10 如果是使用Eclipse的话,还可能会看到这样的警告:Attribute minSdkVersion (4) is lower than the project target API level (10)原创 2014-10-13 16:02:16 · 11396 阅读 · 0 评论 -
【移动开发】Service类onStartCommand()返回值和参数
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。然后我们注意到这个函数有一个int的返回值,这篇文章就是简单地讲讲int返回值的作用。从Android官方文档中,我们知道onStartCommand有4种返回值:ST原创 2014-10-15 13:32:10 · 13170 阅读 · 1 评论 -
【移动开发】SparseArray替代HashMap
SparseArray是android里为这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch)[java] view plaincopyprivate static int binarySearch(int[] a, int start, int len, int key) { int high = start + len, low原创 2014-10-14 17:06:01 · 1711 阅读 · 0 评论 -
【移动开发】捕获异常信息_UncaughtExceptionHandler
当程序崩溃(Crash)的时候,默认是不对异常信息做处理的。如果想要把异常信息保存到本地文件中,或上传的服务器。那么就要借助UncaughtExceptionHandler这个类。首先,实例化UncaughtExceptionHandler,代码如下:public class ForceCloseHandler implements Thread.UncaughtExceptionHandler { public static final String LOG_FILE_NAME = "f原创 2014-09-22 17:27:30 · 5848 阅读 · 2 评论 -
【移动开发】为ViewGroup的子视图添加动画效果
默认情况下,ViewGroup中的子视图是直接显示出来的。有一个简单的方法可以为这个过程添加动画效果。主要使用LayoutAnimationController类,有一点需要注意,不可以为每一个单独的子视图分别指定不同的动画效果。下面是在ListView中为每一个Item添加动画效果的例子。翻译 2014-09-07 12:57:27 · 4387 阅读 · 0 评论 -
【移动开发】如何自定义ViewGroup
依照惯例,先从一个例子说起。很简单,3张扑克牌叠在一起显示。这个布局效果该如何实现呢?有的同学该说了,这很简单啊,用RelativeLayout或FrameLayout,然后为每一个扑克牌设置margin就能实现了。ok,那就看一下通过这种方式是如何实现的。代码如下:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"翻译 2014-09-05 00:14:02 · 10482 阅读 · 9 评论 -
【移动开发】布局优化利器<include/>和ViewStub
当创建复杂的布局的时候,有时候会发现添加了很多的ViewGroup和View。随之而来的问题是View树的层次越来越深,应用也变的越来越慢,因为UI渲染是非常耗时的。这时候就应该进行布局优化了。这里介绍两种方式,分别为标签和ViewStub类。使用是为了避免代码的重复。设想一种情况,我们需要为app中的每个视图都添加一个footer,这个footer是一个显示app名字的TextView。通常多个翻译 2014-09-04 00:24:49 · 8539 阅读 · 29 评论 -
【移动开发】按比例布局layout_weight和weightSum
混合使用weightSum和layout_weight先看效果,button占据屏幕宽度的一半。再看开发文档中的描述。“定义weight总和的最大值。如果未指定该值,以所有子视图的layout_weight属性的累加值作为总和的最大值。一个典型的案例是:通过指定子视图的layout_weight属性为0.5,并设置LinearLayout的weightSum属性为1.0,实现子视图占据可用宽度的50。”XML文件的源码。<LinearLayout xmlns:android="http://sc翻译 2014-09-01 01:31:21 · 16852 阅读 · 7 评论 -
【移动开发】在Canvas上显示动画
当自定义View的时候,可以利用Canvas给View添加一些动画效果。下面的例子,是在屏幕上绘制一个红色的小方块,这个小方块会在屏幕上面“乱跳”。知识点使用到的知识点:(1) 在View的子类的draw()中调用invalidate(),可以让View对象一直保持重绘状态,从而可以使Canvas一直处于绘画过程中。(2) Canvas的绘制功能,例如绘制Rect、Circle、Path等。(3) 小方块碰撞屏幕边缘的算法。实现小方块视图。继承View类,重写onDraw()方法,并提翻译 2014-09-08 13:15:12 · 3719 阅读 · 0 评论 -
【移动开发】如何使用ndk和jni
概述Android系统的底层库由c/c++编写,上层Android应用程序通过Java虚拟机调用底层接口,衔接底层c/c++库与Java应用程序间的接口正是JNI(Java Native Interface)。本文将描述如何在Ubuntu下配置Android JNI的开发环境,以及如何编写一个简单的c函数库和JNI接口,并通过编写Java程序调用这些接口,最终运行在模拟器上的过程。环境配置1. 安装jdk 1.6(1) 从jdk官方网站http://www.oracle.com/techne原创 2014-09-22 15:56:02 · 2187 阅读 · 0 评论 -
【移动开发】Ken Burns特效的幻灯片
Ken Burns特效,是视频产品中使用的一种平移和缩放的静态图片的特效。先看维基百科针对Ken Burns特效的介绍。http://en.wikipedia.org/wiki/Ken_Burns_effect要实现这个效果,需要使用NineOldAndroids库,这个库可以在旧版本上使用Android 3.0的动画库。翻译 2014-09-10 00:19:56 · 35460 阅读 · 22 评论 -
【移动开发】Handler的sendMessageAtTime()和sendEmptyMessageDelay()区别
函数原型public boolean sendMessageAtTime (Message msg, long uptimeMillis)Message //待发送消息uptimeMillis //sendMessageAtTime,即在确定的时间发送这个消息,这个时间通过这个参数指定这个时间由uptimeMillis传递 这两句是等效的,都是延时1秒将消息加入列队msgHandle.sen原创 2014-10-12 13:21:56 · 9542 阅读 · 2 评论 -
【移动开发】ViewPager缓存机制
1. 实现ViewPager的页面懒加载;在某些情况下,例如使用ViewPager查看多张大图,此时多张图片不能一次性载入,只有在浏览该页面时才载入(或者预先载入下一页面)页面的具体内容。2. 可控ViewPager缓存页面的数量。常见的情况:1.页面的总数是已知的,或者可以计算出来,每个页面占用的资源并不多并且需要经常使用这些页面。这是可以考虑将其常驻ViewPager而不去销毁(频原创 2014-10-15 23:00:47 · 25380 阅读 · 2 评论 -
【移动开发】ListView的setSelection()和setSelectionFromTop()联系
通常,app中的数据都是以ListView的形式展示的。默认地,把“新”数据添加到数据列表的尾部。但是,如果是IM类型的app,比如查看历史消息这个模块。新数据并不是插到数据列表的尾部,而是插到数据列表的头部。要实现比较好的用户体验,需要保持当前的ListView的位置。换句话说,如果我们能够随心所欲地指定ListView滚动的位置,那么这个问题就迎刃而解。在ListView中,有一个setSelectionFromTop()方法,下面是一个使用范例。代码如下:原创 2014-09-10 16:55:41 · 61514 阅读 · 3 评论 -
【移动开发】View的scrollTo()和scrollBy()区别
首先,需要知道的是,View是可以延伸到屏幕之外的,可以想象一下ListVIew或GridView。也就是说View的尺寸可以超过屏幕的尺寸。View的大小就是onDraw()中Canvas画布的大小。Canvas可以做translate()、clipRec()t等变换,可以说Canvas是无边界的。而我们在屏幕上所见到的,只是Canvas的一部分而已。可以调用View的scrollTo()和sc原创 2014-09-12 13:27:10 · 17653 阅读 · 5 评论 -
【移动开发】Context类bindService()参数
bindService()的函数原型,代码如下:原创 2014-10-15 13:59:43 · 15984 阅读 · 3 评论 -
【移动开发】一张图搞定Activity和Fragment的生命周期
原创 2014-10-14 16:55:12 · 1835 阅读 · 0 评论 -
【移动开发】plurals
不同的语言对数量的语法规定有不同的规则。在英语里面,例如,1是特例。我们会直接写1book,而针对一个以上的我们会在book后加复数形式。这种区别对单数和复数来说是很普遍的,但是其他的语言做了更好的区分。对Android来说,它支持zero,one,two,few,many,和other。 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法ge原创 2014-10-13 16:32:22 · 1760 阅读 · 0 评论