- 浏览: 71631 次
最新评论
文章列表
以下通过touch input为例, 通过时序图, 描述input event在frameworks的传递:
1. [sequence_diagram]_read_and_process_touch_event
2. [sequence_diagram]_disptach_touch_event
之前写过一篇文章:
Android 3.1后, 新安装的以及用户强行停止的apk, 无法监听广播的问题
今天终于研究了一下原理, 把代码执行逻辑贴上来:
ContextImpl.sendBroadcast()
ActivityManagerNative.getDefault().broadcastIntent()
ActivityManagerService.broadcastIntent()
ActivityManagerService.broadcastIntentLocked()
Act ...
碰到个问题, 应用在收到BOOT_COMPLETED广播的时候, 往往已经进入桌面了.
然后有同事提出来: 可以收PRE_BOOT_COMPLETED广播啊.
于是就研究了一下这个广播的发送.
========================================
本文地址: http://oliveexcel.iteye.com/blog/2302947
========================================
一切从SystemServer.main()开始:
SystemServer.main()
-> SystemS ...
在6.0的工程下面, 尝试通过mm / mmm编译单个module, 但是发现编译完后, 不产生classes.jar.
请教过后, 得到这个方法:
LOCAL_JACK_ENABLED := disabled
写了段代码, 无论如何无法正常执行:
File dir = Environment.getExternalStorageDirectory();
...
File[] children = dir.listFiles(); // children取出来是null
然后加了判断, 发现dir不可读:
File dir = Environment.getExternalStorageDirectory();
...
if (dir.canRead()) { // dir不可读
File[] children = dir.listFiles(); ...
}
难道 ...
20180530更新:
在build.gradle的dependencies中添加以下内容即可:
compile 'com.android.support:appcompat-v7:26.1.0'
================================ 以下为旧版本 ================================
在IDEA里尝试使用Android FloatingActionButton(即FAB), 碰到各种问题. 记录于此:
1. FAB库位置:
support库下的design工程
2. FAB库依赖:
...
疑问与解答:
1. 在AOSP编译过程中, 每个module, 都需要通过Android.mk, 配置编译module需要依赖的lib. 这个配置一般通过 LOCAL_JAVA_LIBRARIES 或者 LOCAL_STATIC_JAVA_LIBRARIES 实现;
2. 某些module, 如果不依赖特定的lib, 那么上述lib依赖关系的字段是可以不写的. 但是在这些module在编译过程中, 明显依赖了frameworks的一些接口, 但为什么不需要声明依赖关系?
3. 答案很简单很无聊: 系统帮你指定了默认的lib呗.
需求:
那么问题来了, 如果想往AOSP的默认l ...
20160617更新:
使用Android 6.0的NDK重新编译so文件, 即可解决问题.
===================================================================
20151017内容:
首先贴一下这个问题的官方答复:
https://code.google.com/p/android-developer-preview/issues/detail?id=3028
先介绍一下这个问题的背景 (没兴趣看的, 可以直接跳到下文的问题解决方案):
1. 这个问题出现在loadLibrary()的过程中 ...
Android的Theme是由各种attr组合而成, 每个attr对应了这个属性的一个引用, 这个引用又可以是各种东西.
在某些情况下, 我们需要获取非自定义的主题下某个属性的内容 (比如拿到系统默认的配色colorAccent), 操作方式举例一则:
int defaultColor = 0xFF000000;
int[] attrsArray = { andorid.r.attr.colorAccent };
TypedArray typedArray = context.obtainStyledAttributes(attrsArray);
int accentColor ...
一般来说, View是需要在绘制到界面之后才能取到它的宽度 / 高度.
如果需要在绘制之前就取到这些值, 则需要主动调用View的measure方法, 来提前计算其尺寸. 如下:
final DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
viewToMeasure.measure(
View.MeasureSpec.makeMeasureSpec(dm.widthPixels, View.MeasureSpec.AT_MOST),
View.MeasureSpec.ma ...
需求:
在frameworks/base/core/java下新增了aidl文件, 需要将其加入至编译
实现:
1. 由于frameworks/base/core/java路径下的内容, 最终会编译至framework.jar, 故需要修改framework.jar的编译配置, 即frameworks/base/Android.mk
2. 无论*.java还是*.aidl, 都是通过以下方式加入编译的:
LOCAL_SRC_FILES += bla-bla
java文件可以通过以下方式遍历得到:
$(call find-other-java-files,[包 ...
需求:
集成一个新的apk模块到Android系统镜像.
实现:
这里要分两种情况, 一种是带源码的, 一种是不带源码的.
1. 无论带源码与否, 都需要在工程目录下建议Android.mk文件, 并在其中指定模块名称:
# 一种写法
LOCAL_PACKAGE_NAME := [模块名]
# 另一种写法
LOCAL_MODULE := [模块名]
2. 带源码的, 需要使用以下方式将源码加入编译:
LOCAL_SRC_FILES := [源码路径]
不带源码的, 若是以apk形式存在, 则:
LOCAL_SRC_FILES := [apk路径]/[a ...
需求:
有一三方提供的SDK, 以jar包形式存在, 对Context等frameworks内容有依赖. 现需要将其编译进系统, 并供framework.jar中的类调用.
实现:
1. 在frameworks/base/Android.mk中加入对jar包的引用:
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := <my lib name>:<my lib path and name>
include $(BUILD_MULTI_PREBUILT)
2. 在编译frame ...
需求: 要求得到某个Activity的启动时间
实现:
1. adb shell下面存在am命令, 使用start -W -n参数, 即可获取Activity启动时间的信息;
2. 上述Activity的启动信息中, 包含了本次启动时间.
================================= 需求变更的分割线 ...
帮同事看一个问题: 工程下面同时触发两个的AsyncTask, 预期可以同时执行, 但实际结果它们是顺序执行的.
思不得解, 百度一把, 看到有人问怎样控制多AsyncTask的运行优先级, 然后有人回复了一行代码:
AsyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, null);
虽然代码完全没有解决问题, 但是看得出, 这里有一些并发设计相关的东西AsyncTask.SERIAL_EXECUTOR. 它是一个顺序Executor, 并且一次只能执行一个线程. 代码中定义如下:
/**
* An {@link Ex ...