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 more

Android.mk 文件的编写

2014-03-16 18:37:00 by suphy

Android.mk 文件的编写

Android.mk 文件通常以以下两行代码作为开头:

LOCAL_PATH := $(call my-dir) 
 include $(CLEAR_VARS) 

这两行代码的作用是:

  1. 设置当前模块的编译路径为当前文件夹路径。
  2. 清理(可能由其他模块设置过的)编译环境中用到的变量。

为了方便模块的编译,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 ...
read more

Android图片缓存

2014-03-11 11:37:00 by suphy

开源lib Universal Image Loader

  1. ImageLoader根据ImageView的width,height确定图片的宽高。
  2. 经常出现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();
  3. 内存缓存,sd卡缓存,显示图片,可以使用已经初始化过的实现;

  4. 为了避免使用list,grid,scroll,你可以使用:
boolean pauseOnScroll = false; // or true ...
read more

如何在Android jni中使用Log

2014-02-18 17:37:00 by suphy

打开Android C/C++文件中的Log

方法一:

  1. 在Android.mk文件中加入:LOCAL_LDLIBS := -llog
  2. 在要使用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__)
  1. 在需要打印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 ...
read more

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 ...

read more