Android关于高效显示图片的问题
2014-03-17 17:37:00
by suphy
Android关于高效显示图片的问题
Bitmap的immutable和mutable
Bitmap可以理解为Android里的画布,Canvas是画笔,Paint是画笔属性的设置,View是画图的地方;
图像(Image)有immutable(不可变的)和mutable(可变的)之分,创建自图形的Bitmap是immutable,而给定宽高以及其他一些参数创建的Bitmap是mutable.
//Immutable bitmap
Bitmap temp = BitmapFactory.decodeFile("/sdcard/xxx.jpg");
Bitmap immutable = Bitmap.createBitmap(temp);
//mutable bitmap
Bitmap mutalbe = Bitmap.createBitmap(240, 320, Bitmap.Config.RGB_565);
在使用Canvas canvas = new Canvas(bitmap);
时,传入的参数只能是mutable的bitmap.
BitmapFactory.Options ...
read moreAndroid.mk 文件的编写
2014-03-16 18:37:00
by suphy
Android.mk 文件的编写
Android.mk 文件通常以以下两行代码作为开头:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
这两行代码的作用是:
- 设置当前模块的编译路径为当前文件夹路径。
- 清理(可能由其他模块设置过的)编译环境中用到的变量。
为了方便模块的编译,Build 系统设置了很多的编译环境变量。要编译一个模块,只要在编译之前根据需要设置这些变量然后执行编译即可。它们包括:
- LOCAL_SRC_FILES:当前模块包含的所有源代码文件。
- LOCAL_MODULE:当前模块的名称,这个名称应当是唯一的,模块间的依赖关系就是通过这个名称来引用的。
- LOCAL_C_INCLUDES:C 或 C++ 语言需要的头文件的路径。
- LOCAL_STATIC_LIBRARIES:当前模块在静态链接时需要的库的名称。
- LOCAL_SHARED_LIBRARIES:当前模块在运行时依赖的动态库的名称。
- LOCAL_CFLAGS:提供给 C/C++ 编译器的额外编译参数。
- LOCAL_JAVA_LIBRARIES:当前模块依赖的 Java 共享库。
- LOCAL_STATIC_JAVA_LIBRARIES:当前模块依赖的 Java ...
Android图片缓存
2014-03-11 11:37:00
by suphy
开源lib Universal Image Loader
- ImageLoader根据ImageView的width,height确定图片的宽高。
-
经常出现OutOfMemory:
- 减少线程池数目.threadPoolSize(1 - 5 is recommended)
- 使用.bitmapConfig(Bitmap.Config.RGB_565)减少图片占用内存数目
- memoryCache(new WeakMemoryCache()) 及时释放内存
- imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
- 避免使用RoundedBitmapDisplayer;他会创建新的ARGB_8888格式的Bitmap对象;
- 使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
-
内存缓存,sd卡缓存,显示图片,可以使用已经初始化过的实现;
- 为了避免使用list,grid,scroll,你可以使用:
boolean pauseOnScroll = false; // or true ...
如何在Android jni中使用Log
2014-02-18 17:37:00
by suphy
打开Android C/C++文件中的Log
方法一:
- 在Android.mk文件中加入:
LOCAL_LDLIBS := -llog
- 在要使用log的cpp文件中加入:
#include <utils/Log.h>
#define LOG_TAG "TAGNAME"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
- 在需要打印log的地方使用:
LOGD("************")
read more注 ...
Launcher3知识总结
2014-02-17 17:37:00
by suphy
一、xml文件解析
Android解析XML文件标签的属性,获取属性的值,如:
<favorites>
...
<favorite
launcher:packageName="com.android.dialer"
launcher:className="com.android.dialer.DialtactsActivity"
launcher:container="-101"
launcher:screen="0"
launcher:x="0"
launcher:y="0" />
...
</favorites
在attrs.xml文件中定义属性:
<!-- XML attributes used by default_workspace.xml -->
<declare-styleable name="Favorite">
<attr name="className" format="string" />
<attr name="packageName ...
Android内存分析和调优
2014-02-13 20:03:00
by suphy
Android内存分析和调优
内存相关名词解释:VSS/RSS/PSS/USS
- VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
- RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
- PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
- USS Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
要优化内存,首先要做的就是分析内存占用情况。android提供了多个工具和命令进行内存分析
第一层 procrank命令
adb shell procrank
可以使用以下命令连续查看某一进程内存使用情况:
while true; do procrank | grep com ...