1

私のアプリケーションでは、データベースからいくつかの URL を読み込み、それらを に保存しArrayList<Bitmap>てギャラリーに配置します。うまく機能しますが、非常に遅いです。ArrayList問題は、画像を表示する前にすべてのビットマップをロードすることです。

        try
        {
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++)
            {
                Temp = jArray.get(i).toString();

                HttpURLConnection connection = null;
                try 
                {
                    connection = (HttpURLConnection) new URL(Temp).openConnection();
                } 
                catch (MalformedURLException e) 
                {
                    e.printStackTrace();
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                }
                connection.connect();
                InputStream input = connection.getInputStream();

                x = BitmapFactory.decodeStream(input);
                bitmapArray.add(x);
            }
        }
        return bitmapArray; // returning the array list with all the bitmaps inside

    protected void onPostExecute(ArrayList<Bitmap> donnees)
    {
        SetupInterface(); // This method sends the arraylist to an image adatper and display bitmaps to the screen.
    }

私の問題はSetupInterface()、配列がいっぱいになって返されたときにのみ呼び出されることです。したがって、アクティビティを開くと、ギャラリーを表示するのに約 4 ~ 5 秒かかります。これは、表示する前に配列内のすべてのビットマップを読み込む必要があるためです。より速くする方法は?

4

2 に答える 2

0

画像のダウンロードと画像のデコードには時間がかかります。jArray の内容はすでにわかっています (少なくとも長さ、それらの画像の名前など...)。デフォルトの背景画像を含む配列を画像アダプターに直接送信し、AsyncTask を使用してそれらの実際の画像を 1 つずつ読み込む必要があります。

于 2013-01-16T23:35:45.833 に答える
0

アクティビティ ロードの開始時に、最初の画像のみを表示します。アクティビティが表示され、すべての初期化作業が完了したら、残りの画像を読み込みます。あなたはできる:

  1. たとえばHandlerまたはAsyncTaskを使用して、バックグラウンド スレッドでそれらを 1 つずつロードします。2番目は実装が簡単になります。
  2. ユーザーが「次へ」をクリックするなど、ロードする必要がある場合に、次のイメージをロードします。遅延読み込みと呼ばれます。
于 2013-01-16T23:35:54.940 に答える