对于我的 flash 应用程序,我需要创建一个“ native 扩展”,这是一个 native android Java 调用。此扩展构建一个包含所有图像文件及其相应缩略图的字符串,并将其返回给 Flash。
我不是 Java 程序员,这是我第一次尝试编写 android 代码。所以经过 2 天的挖掘,我想到了这个:
public String getThumbPaths(Uri uri, ThumbContext ctx) {
String out = "";
Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnails(ctx
.getActivity().getContentResolver(), uri,
MediaStore.Images.Thumbnails.MINI_KIND, null);
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
String imageId = cursor.getString(cursor
.getColumnIndex(Thumbnails.IMAGE_ID));
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor images = ctx.getActivity().managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
filePathColumn, MediaStore.Images.Media._ID + "=?",
new String[] { imageId }, null);
String filePath = "";
if (images != null && images.moveToFirst()) {
filePath = images.getString(images.getColumnIndex(filePathColumn[0]));
}
out += cursor.getString(1) + ";" + filePath+";";
}
return out;
}
和电话
ThumbContext ctx = (ThumbContext) context;
Uri uri = MediaStore.Images.Thumbnails.getContentUri("external"); // content://media/external/images/thumbnails
String paths = getThumbPaths(uri, ctx);
一切正常,除了速度。我不知道发生这种情况是因为 Flash-Java-Flash 调用还是上面的代码,我无法检查,因为编译发生在 Flash 内部。
所以我的问题是:我可以加速这段代码吗?也许在“for”循环内没有第二个光标的情况下执行此操作?
最佳答案
您可以进行一些小的优化。
cursor.getColumnIndex(Thumbnails.IMAGE_ID)
将为游标的每次迭代返回相同的值。将其分配给循环外的变量。String[] filePathColumn
在每次迭代中都被赋予相同的值(并在每次迭代中创建一个新对象)。将其移出循环。- 对于内部
Cursor
,MediaStore.Images.Media._ID + "=?"
始终具有相同的值。在循环外:) - 与其将
out
创建为String
并附加到它,不如考虑使用java.lang.StringBuilder
。
关于java - 安卓缩略图列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399969/