
Android
文章平均质量分 81
DaveeChen
呵呵
展开
-
深入分析AIDL原理
在上一篇文章(Service使用方式)中,介绍了Android进程间通信(IPC)的使用,并给出了一个示例。但并没有深入分析aidl是怎样可以做到进程间通信的,它的执行过程是怎样的?这篇文章来分析IRemoteService.aidl的执行过程,并理解aidl是怎样跨进程通信的。 当我们创建IRemoteService.aidl文件时,IDE会为我们在gen目录中创建相应的文件。 ...2011-11-13 16:14:54 · 233 阅读 · 0 评论 -
ListView中显示SD卡、数据库、网络图片
实现下图,图片来自SD卡、数据库、网络图片 定义一个ListView的xml(res/layout/list_view.xml) <?xml version="1.0" encoding="utf-8"?><ListView xmlns:android="http://schemas.android.com/apk/res/android" a...2011-07-07 00:09:18 · 215 阅读 · 0 评论 -
显示Web图片和SD卡图片
下面是res/layout/show_image.xml <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:...2011-06-29 10:29:38 · 129 阅读 · 0 评论 -
dip与px单位之间转换
//转换dip为pxpublic static int convertDIP2PX(Context context, int dip) { float scale = context.getResources().getDisplayMetrics().density; return (int)(dip*scale + 0.5f*(dip>=0?1:-1));}...2011-09-25 10:11:57 · 101 阅读 · 0 评论 -
屏幕尺寸(高、宽)
Display display = getWindowManager().getDefaultDisplay();display.getWidth();//返回px值display.getHeight();//返回px值display.getRotation();返回0或1,0表示竖屏,1表示横屏DisplayMetrics dm = new DisplayMetrics...2011-09-25 10:11:07 · 173 阅读 · 0 评论 -
判断手机外存(SD卡)状态
public int getExternalStorageState() { int result;//0:不可读写 1:只读 2:读写 String state = android.os.Environment.getExternalStorageState(); if(android.os.Environment.MEDIA_MOUNTED.equals(state)){...2011-09-25 10:07:27 · 143 阅读 · 0 评论 -
SQLite数据类型
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数 据类型: 1.NULL:空值。2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。3.REAL:浮点数字,存储为8-byte IEEE浮点数。4.TEXT:字符串文本。5.BLOB:二进制对象。 但实际上,sq...2011-09-25 10:03:23 · 140 阅读 · 0 评论 -
使用WebView实现腾讯微博OAuth登录
接着上一篇文章"使用WebView实现新浪微博OAuth登录",实现腾讯微博OAuth登录。 #腾讯官方下载SDKhttp://open.t.qq.com/resource.php?i=3,1 #申请应用KEY登录腾讯微博,进入http://open.t.qq.com/申请应用,获取KEY和SECRET。 #准备在项目中导入QWeiboSDK.jar、do...2011-09-24 21:11:42 · 180 阅读 · 0 评论 -
使用WebView实现新浪微博OAuth登录
#新浪官方下载SDK(weibo4android)http://open.weibo.com/wiki/index.php/SDK #申请应用KEY登录新浪微博,进入http://open.weibo.com/申请应用,获取KEY和SECRET。 #准备在项目中导入commons-httpclient-3.x.jar并加入weibo4android、weibo4a...2011-09-20 12:18:55 · 245 阅读 · 0 评论 -
高效率下载图片——防止内存溢出
在应用中经常需要下载很多的图片,因此,写好图片下载部分的代码非常关键。不好的代码很容易创建太多的对象,导致经常执行GC,接着就出现了ANR;也很容易导致内存溢出OOM。 现在,我从防止ANR和OOM的角度写下载图片的代码。再来分析一下需求,当我需要为图片列表下载很多张图片时,我期望图片是有顺序地一张一张显示,而不是开启很多线程同时下载多张图片(注意:这样也会影响每个线程的执行速度)。 ...2011-09-18 13:09:29 · 187 阅读 · 0 评论 -
PopupWindow使用
使用PopupWindow来显示一个浮层点击按钮后弹出浮层 public class PopupWindowDemo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc...2011-09-16 14:05:50 · 69 阅读 · 0 评论 -
Android通知
private void showNotification() { Intent intent = new Intent(this,MyNotificationView.class); PendingIntent contentIntent = PendingIntent.getActivity(this,0, intent, 0); //在Status Bar显示的图片、...2011-09-07 17:56:40 · 101 阅读 · 0 评论 -
横向滚动条顶端或尾端事件
#功能:当横向滚动条滚到顶端时,左箭头灰掉;当滚到尾端时,右箭头灰掉;当滚到中间时,左右箭头水红色;效果如下图 <!-- /res/layout/horizontal_view_demo.xml --><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="ht...2011-07-07 09:10:11 · 190 阅读 · 0 评论 -
GridView实现一行显示并左右滚动
使用GridView达到Gallery效果 <?xml version="1.0" encoding="utf-8"?><!-- res/layout/gridview_to_gallery.xml --><HorizontalScrollView xmlns:android="http://schemas.android.com/apk/re...2011-07-10 11:04:49 · 305 阅读 · 0 评论 -
Service使用方式
使用Service的场合:1.一个或多个Activity需要向同一应用中的Service发出执行某一操作的命令。PS:不需要绑定 2.某个Activity需要同一应用中的Service为其单独服务,当此Activity消毁时,也将为其服务的Service一并消毁。PS:需要绑定 3.多个Activity绑定到同一个Service,仅当所有A...2011-11-13 15:23:54 · 135 阅读 · 0 评论 -
布局中引入子布局
在Web开发中,经常会在jsp中include子jsp。这样做的好处是多个页面相同部分不需要写多次,便于开发和维护。 在Android的布局中也有类似的功能 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertica...2011-08-11 18:01:57 · 189 阅读 · 0 评论 -
反编译Android工程——apk文件
1.先下载apk反编译工具——jd-gui.rar(在下面附件中有提供),并解压缩,其中有一个dex2jar-xxxx.zip文件(还有AXMLPrinter2.jar和jd-gui.exe等),继续解压此文件,以获取dex2jar.bat工具。 2.将xx.apk文件改名为xx.zip,并解压缩。可以获取到资源文件和AndroidManifest.xml文件,还有类文件包class...2011-08-06 10:55:29 · 156 阅读 · 0 评论 -
在onCreate方法中获取某个View的宽度和高度
有时候需要在onCreate方法中知道某个View组件的宽度和高度等信息,而直接调用View组件的getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight()、getTop()、getLeft()等方法是无法获取到真实值的,只会得到0。这是因为View组件布局要在onResume回调后完成。下面提供实现方法,onGlobalLayout...2011-10-08 14:54:36 · 152 阅读 · 0 评论 -
不加载图片,仅仅获取图片文件分辨率
当从SD卡中获取图片时,如果图片太大,加载会出现溢出异常。因此,需要先获取到分辨率,再对大图片按分辨率比率缩小后加载,这样就能够防止溢出异常。BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; Bitmap bit...2011-10-08 11:09:11 · 211 阅读 · 0 评论 -
禁用软键盘
默认Android在需要输入时传动显示软键盘(如下图),这是符合常理的。 但有时候需要禁止使用软键盘。 public class ProhibitSoftKeyboardDemo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.on...2011-07-12 17:23:20 · 169 阅读 · 0 评论 -
图片移动和缩放
import android.graphics.Matrix;import android.graphics.PointF;import android.util.FloatMath;import android.util.Log;import android.view.MotionEvent;import android.view.View;import andro...2011-09-29 22:15:08 · 153 阅读 · 0 评论 -
定时任务
定时任务有执行一次和重复执行两种public class AlarmBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, R.string.show_...2011-09-28 00:53:14 · 99 阅读 · 0 评论 -
几种创建LayoutInflater对象的方法
LayoutInflater layoutInflater;1.layoutInflater = Context.getLayoutInflater();2.layoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);3.layoutInflater = L...2011-09-28 00:51:33 · 223 阅读 · 0 评论 -
判断网络类型及是否有网络
判断当前是否有可用网络public boolean checkNetworkAvailable() { boolean isNetworkAvailable = false; android.net.ConnectivityManager connManager = (android.net.ConnectivityManager)getApplicationContext()....2011-09-28 00:49:28 · 202 阅读 · 0 评论 -
设置全屏
1.编程方式public void setFullScreenMethod1(boolean isFullScreen) { if (isFullScreen) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { getWindow().addFlags(Window...2011-09-26 23:40:05 · 123 阅读 · 0 评论 -
AlarmManager.RTC和ELAPSED_REALTIME的区别
AlarmManager.RTC,硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟。AlarmManager.RTC_WAKEUP,硬件闹钟,当闹钟发躰时唤醒手机休眠;AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟。AlarmManager.ELAPSED_REALTIME_WAKEUP,真...2011-09-04 17:33:39 · 945 阅读 · 0 评论 -
开机自启动
经常会有这样的需求,当手机开机后立刻启动一个服务或者一个活动。 import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class AutoStartReceiv...2011-09-04 13:55:56 · 126 阅读 · 0 评论 -
图片压缩工具——pngquant
做移动项目开发时,应用中常常会包含图片,而图片一般都比较大,会加大上线包的大小。如果能把图片大小压缩,而不影响图片质量,这样包相对较小,就可以全用pngquant了。官网下载:pngquant原创 2013-06-28 14:58:06 · 3433 阅读 · 1 评论 -
android命令行打包、签名+自动打包器
本文主要讲解使用命令行打包android工程成apk文件,我的android工程结构如图1.创建key: 使用keytool.exe(位于%JAVA_HOME%\bin\keytool.exe)创建xxx.keystore,在命令行输入:keytool -genkey -alias debug.keystore -keyalg RSA -validity 20000 -ke原创 2011-12-31 17:46:28 · 26196 阅读 · 10 评论 -
Android陷阱
陷阱1:当创建一张图片时,时常会写出这样的代码 public Bitmap getBitmap(int resId, int dstWidth, int dstHeight) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId); if (bitmap != null) { if (dstWid原创 2012-08-02 17:14:00 · 3623 阅读 · 1 评论 -
Android中开启一个空线程会占用多少内存
Android开发中,开启一个线程会占用多少内存空间?这个问题我一直没有测试过,以前在网上看见别人说需要1M内存(可能是该网友包含了很多数据),今天对这个问题做了一个测试。为了不影响测试,我使用空线程(线程不做任何事情,也不包含任何数据)。先贴上测试代码thread_occupy_memory.xml<LinearLayout xmlns:android="http://sc原创 2012-04-11 15:27:35 · 13638 阅读 · 3 评论 -
字母索引查询ListView组件
现在很多Android应用都做了类似IOS的字母索引查询功能,今天我将这个功能封装成了一个组件当点击或者在字母上上下移动时的画面package com.alphabet.widget;import android.content.Context;import android.graphics.Color;import android.os.Handler;原创 2011-12-13 17:43:46 · 6354 阅读 · 6 评论 -
WebView用法与JS交互
这篇文章讲了一些WevView的使用方法,在项目中,常常会使用到,尤其是需要与JS交互。效果图点击“调用alert”按钮,在Android中捕获JS alert,并用Android组件(AlertDialog)替换点击“调用java方法”按钮,在JS中调用并传递参数到Java中的方法点击“调JS方法”按钮(这个按钮不是html元素,而原创 2011-11-29 14:57:33 · 30020 阅读 · 4 评论 -
几种常用BroadcastReceiver
开机广播可在此广播中做开机自启动服务public class BootBroadcasrReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("CDH", "开机广播"); }}原创 2011-11-27 15:06:57 · 4888 阅读 · 0 评论 -
BroadcastReceiver使用方式
从行为上广播类型有两种:无序广播(Normal broadcasts):无序且并行执行广播有序广播(Ordered broadcasts):有序地一个接一个执行广播当通过意图发送广播时,无论BroadcastReceiver定义在当前应用还是其他应用中,只要BroadcastReceiver对此意图感兴趣(如:匹配Action),就会得到执行。有序广播和无序广播默认都是运行在U原创 2011-11-26 21:51:05 · 4903 阅读 · 0 评论 -
Android IPC进程通信——Messager方式
Android IPC通信有两种方式,上一篇文章深入分析AIDL原理讲解了AIDL方式,这篇文章讲解另一种IPC通信方式——Messager方式。Messager实现IPC通信,底层也是使用了AIDL方式。和AIDL方式不同的是,Messager方式是利用Handler形式处理,因此,它是线程安全的,这也表示它不支持并发处理;而AIDL方式是非线程安全的,支持并发处理,因此,我们使用AIDL方原创 2011-11-25 00:06:40 · 14658 阅读 · 3 评论 -
深入分析AIDL原理
在上一篇文章(Service使用方式)中,介绍了Android进程间通信(IPC)的使用,并给出了一个示例。但并没有深入分析aidl是怎样可以做到进程间通信的,它的执行过程是怎样的?这篇文章来分析IRemoteService.aidl的执行过程,并理解aidl是怎样跨进程通信的。 当我们创建IRemoteService.aidl文件时,IDE会为我们在gen目录中创建相应的原创 2011-11-18 17:29:28 · 24153 阅读 · 6 评论 -
音频压缩工具——Speex的使用
在Android开发中,需要录音并发送到对方设备上。这时问题来了,手机常会是GPRS、3G等方式上网,所以节省流量是非常关键的,使用Speex来压缩音频文件,可以将音频压文件小数倍。1.去Speex官网下载最新Speex源码。2.创建一个新的应用(我创建的应用名为Audio),并创建一个jni目录($project/jni)。3.把speex源码目录下的libspeex和include原创 2011-12-20 16:17:23 · 35318 阅读 · 18 评论 -
Android通过NDK获取Keystore签名值
防止别人反编译自已的游戏再修改然后发布,我们可以用在so文件中用Keystore签名值来加密一些参数。这里只提供NDK获取Keystore签名值代码package com.boyaa.ndk;import android.content.Context;public class RegionGames { static { try { System.loadLi原创 2014-03-20 19:02:43 · 11417 阅读 · 2 评论 -
Android虚拟机(DVM)内存分配——内存溢出问题
大家都知道Android的上层应用是基于 Dalvik Virtual Machine的。Dalvik VM的特点是基于寄存器,相比SUN的JVM(基于堆栈,没有寄存器)来说,理论上完成同样的功能需要的指令条数少,但是指令集复杂。到了Android2.2,Dalvik终于实现了JIT(Just In Time)功能,前进了一大步。 近期我们遇到OutOfMemory的错误,通常...原创 2011-09-03 17:19:14 · 206 阅读 · 1 评论