2012-11-15 81 views
2

對於我的Flash應用程序,我需要創建一個「原生擴展」,這是一個原生的android Java調用。此擴展程序生成一個由所有圖像文件及其相應縮略圖組成的字符串,並將其返回給Flash。Android縮略圖列表

我不是一個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」循環內?

回答

0

你可以做幾個小小的優化。

  1. cursor.getColumnIndex(Thumbnails.IMAGE_ID)將通過遊標的每次迭代返回相同的值。將其分配給循環外的變量。
  2. String[] filePathColumn在每次迭代中被分配相同的值(並在每次迭代中也創建一個新對象)。將它移到循環之外。
  3. 對於內部Cursor,MediaStore.Images.Media._ID + "=?"總是具有相同的值。外循環:)
  4. 而不是創建out作爲String並附加到它,請考慮使用java.lang.StringBuilder來代替。
+0

謝謝大衛! :)我一定會將這些位添加到代碼中! – Fossor

+0

哇!大衛你救了我1.7秒總共5.再次感謝!:) – Fossor

+0

隨意標記這是你的答案:) – prprcupofcoffee