摘要:
一、架构二、MediaServer初始化所有的media服务都在进程mediaserver里。其代码在framework/base/media/mediaserver/main_mediaserver.cpp中。初始化过程如下。1. 先初始化AudioFlinger其初始化通过AudioFlinger的父类BindService创建唯一的AudioFlinger实例。2. 然后初始化MediaPlayerService和CameraService3. 最后初始化AudioPolicyService三、 AudioFlinger分析AudioFlinger负责管理每个音轨AudioTrack及R 阅读全文
随笔分类 - Android
Service异常关闭解决
2013-03-19 16:01 by Rudrj2, 515 阅读, 收藏, 编辑
摘要:
每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,这个方法return 一个int值,return 的值有四种:START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。START_NOT 阅读全文
Android转换位图BUG,知其然不知其所以然
2013-03-15 00:55 by Rudrj2, 4214 阅读, 收藏, 编辑
摘要:
最近,在开发某App的时候,发现了一个很奇怪的bug,前面我也发了关于bitmap的总结,但是这个问题恰恰出在BitmapFactory.decodeFile(pathName)这个函数上,使用这个函数在我的应用中如果设置在activity的onCreate方法内部,会导致activity无法加载,返回上级activity。 网上描述的大多数原因是OutOfMemoryError,但我catch不到这个error,所以可以肯定不是内存溢出引起的错误。为什么解码图像会出现这样的问题呢?关于这个问题,我纠结了一段时间。由于调用decodeFile与decodeStream基本相似,中间过程中... 阅读全文
Android开发经验总结
2013-03-13 18:43 by Rudrj2, 2302 阅读, 收藏, 编辑
摘要:
1、有一个方法,有一段类似于下面这样:new Thread(){ public void run(){ // 做了一些数据库操作 db.close(); } }.start(); 结果运行过程中,发现有时候会报数据库已经锁定的异常。最后才定位到上面这段代码。原因是在上面的run()方法中打开了数据库,这个时候会自动锁定Database,如果在关闭数据库之前,另外一个线程B也进行数据库操作,就会报这个异常。如果数据库已经关闭之后,另外一个线程B请求数据库操作,就没有问题。所以在新线程中进行数据库操作,或者是TimerTask中进... 阅读全文
Android事件处理之多点触摸与手势识别
2013-03-10 17:41 by Rudrj2, 24033 阅读, 收藏, 编辑
摘要:
一、Muilti-touch 双指缩放的实现探索:首先要实现OnTouchListener接口,然后重写方法:public boolean onTouch(View v, MotionEvent event); 从这个方法中我们就可以获取实现两指缩放功能的全部信息。View v是触发事件的源,MotionEvent event即一个触摸事件。对屏幕的几乎所有操作都会触发事件,如点击、放开、滑动等。不同的事件在MotionEvent中有不同的id,我们可以根据event.getAction() & MotionEvent.ACTION_MASK的结果来判断是何种事件。有如下事件使我们要用 阅读全文
Github下载Android源码
2013-03-08 19:09 by Rudrj2, 10035 阅读, 收藏, 编辑
摘要:
1 git clone https://android.googlesource.com/device/common.git 2 git clone https://android.googlesource.com/device/google/accessory/arduino.git 3 git clone https://android.googlesource.com/device/google/accessory/demokit.git 4 git clone https://android.googlesource.com/device/htc/common.git ... 阅读全文
Android View.post(Runnable )
2013-03-06 19:35 by Rudrj2, 31850 阅读, 收藏, 编辑
摘要:
Runnable 并不一定是新开一个线程,比如下面的调用方法就是运行在UI主线程中的: Handler mHandler=new Handler(); mHandler.post(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub } });官方对这个方法的解释如下,注意其中的:“The runnable will be runon the user interface thread.”boolean android.view.View .post(Runnable acti... 阅读全文
Android图像处理之Bitmap类
2013-03-04 21:27 by Rudrj2, 1311 阅读, 收藏, 编辑
摘要:
Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能。一、Bitmap的生成1.1 BitmapFactory decode出Bitmap Bitmap实现在android.graphics包中。但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化。这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,这个类就是BitmapFactory。图一、BitmapFactory 阅读全文
android中dip、dp、px、sp和屏幕密度
2013-02-17 18:12 by Rudrj2, 242 阅读, 收藏, 编辑
摘要:
1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这 这个,不依赖像素。 这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800,但是屏幕密度没有正确设置比如说还是160,那么这个时候凡是使用dip的都会显示异常,基本都是显示过小。 dip的换算: dip(value)=(int) (px(value)/1.5 阅读全文
Android中Activity共享变量的另一方法:Application context
2012-12-27 20:37 by Rudrj2, 866 阅读, 收藏, 编辑
摘要:
最近做局域网socket连接问题,要在多个activity之间公用一个socket连接,就在网上搜了下资料,感觉还是application方法好用,帖出来分享下!Android中在不同Activity中传递变量,通常使用Intent中Bundle添加变量的操作方法。保存参数时:Intent intent = new Intent(); intent.setClass(A.this, B.class); Bundle bundle = new Bundle(); bundle.putString("name", "xiaozhu"); in... 阅读全文
ListActivity源码分析
2012-11-17 18:27 by Rudrj2, 406 阅读, 收藏, 编辑
摘要:
最近老是和ListActivity过意不去,碰到了它的几个问题,干脆读下它的源码吧,搞清楚它的内部机制,有利于问题的解决。 Android中的ListActivity其实就是一个自带ListView的Activity,ListActivity它位于命名空间:android.app之下,从它的源代码就可以清楚的看到,ListActivity继承了Activity,它的基本用法网上有很多资料,随便GOOGLE一下,到处都是,下面主要是分析一下它的Java源代码.(转自王三丰) 1 public class ListActivity extends Activity { 2 /** 3 *... 阅读全文
android 数据库SQL 框架例子
2012-11-10 17:42 by Rudrj2, 614 阅读, 收藏, 编辑
摘要:
这个三个文件是一个完整的的数据库。可以在里面修改需求。第一个文件:MyplayerConstants.java 是定义数据库的一些名称变量 1 /** 2 * 设置常量的类 3 * 4 * @author lihuikun 5 * 2012-7-30 6 */ 7 public class MyplayerConstants { 8 9 /** DB相关 */10 // DB 名称11 public static final String DB_NAME = "myplayer.db" ;12 // 已经播放的电影列表13 public static final St... 阅读全文
Android读取文本文件中内容的方法
2012-11-09 17:25 by Rudrj2, 1649 阅读, 收藏, 编辑
摘要:
这几天在项目开发中,要读取文本文件中内容的,因此写了个读取文本文件中内容的方法,代码如下://读取文本文件中的内容 public static String ReadTxtFile(String strFilePath) { String path = strFilePath; String content = ""; //文件内容字符串 //打开文件 File file = new File(path); //如果path是传递过来的参数,可以做一个非目录的判断 if (file.isDirectory()) { Log.d("TestFile", & 阅读全文
Android获取通讯录
2012-11-01 20:58 by Rudrj2, 5809 阅读, 收藏, 编辑
摘要:
在开发应用中,经常要获取本地手机的通讯录,特别是sns相关类的应用。因为通讯录属于隐私,所以在开发过程中如果要获取通讯录应该征求用户的同意。通讯录一般存在两个地方,一个是本地手机上,一个是存在sim卡上。下面分别讨论一下怎样获取这两个地方的联系人。(在这里我只获取联系人name 和number)android通过contentProvider将通讯录的数据暴露出来,所以只要有一个正确的URI就可以通过contentprovider获取到通讯录数据。贴代码: 1 //取本机通讯录 2 public static HashMap<String, ContractInfo> getPho 阅读全文
Activity的四种加载模式(转载)
2012-10-31 11:28 by Rudrj2, 179 阅读, 收藏, 编辑
摘要:
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。加载模式分类及在哪里配置Activity有四种加载模式:standardsingleTopsingleTasksingleInstance设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:<activity android:name="ActB& 阅读全文