ある場所でアプリの実行が少し遅すぎます。アプリの 4 つの異なるアクティビティの残りはかなり高速に応答しますが、アクティビティの 1 つは遅すぎて快適ではありません。メイン アクティビティからボタンを押すと、各ビューに画像とテキストが表示される gridView で次のアクティビティが開始されます。ボタンを押した後、gridView がロードされたページが表示されるまでに 3 ~ 5 秒かかるなど、時間がかかりすぎます。
ZTE製のさまざまな低速600mhzシングルコアプロセッサAndroid携帯でのテスト。南アフリカ砂漠のカラハリ ブッシュマンなどの人々が使用する低価格の電話の 1 つ。知らない人にとっては、Samsung Galaxy S3 や iPhone 5 と同じクラスではないと言っても過言ではありません。
アプリの実行速度が遅い部分のコードに何か手を加えて、速度を向上させることができないかと考えています。何か案は?私が見ることができる唯一のことは、複数のカーソルとデータベースのクエリの広範な使用が速度を低下させている可能性があることです. gridView をロードすると、深刻なジガブーが必要になると思います。
私のコードはごちゃごちゃしていますが、何かできることはないでしょうか。すべてのコンテンツ プロバイダーのクエリを別のスレッドで実行するのはどうですか? 何か案は?このコードにはエニマが必要です。
以下は、アプリの速度を低下させているコード部分のサンプルです。
private void init_phone_image_grid() {
String[] img = { MediaStore.Images.Media._ID };
imagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, img, MediaStore.Images.Media.IS_PRIVATE + "='" + 1 +"'",null, MediaStore.Images.Media._ID);
image_column_index = imagecursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
count = imagecursor.getCount();
imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
imagegrid.setAdapter(new ImageAdapter(getApplicationContext()));
imagegrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v,int position, long id) {
System.gc();
String[] img = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.TITLE };
imagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, img, MediaStore.Images.Media.IS_PRIVATE + "='" + 1 +"'",null, MediaStore.Images.Media._ID);
image_column_index = imagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
count = imagecursor.getCount();
imagecursor.moveToPosition(position);
// String[] proj = { };
// imagecursor = managedQuery(
// MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj,null, null, null);
// image_column_index = imagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
String i = imagecursor.getString(image_column_index);
// terra = i;
// opens larger pic Intent intent = new Intent(getApplicationContext(), ViewImage.class);
/* intent.putExtra("filename", i);
startActivity(intent); */
// passing bitmap image to another activiy and starting that activity
// textone.setText(i); (i == /mnt/sdcard/DCIM/pic06.png)
Intent intentBitmapStart = new Intent(ImageThumbnailsActivity.this, Editor.class);
intentBitmapStart.putExtra("filename", i);
startActivity(intentBitmapStart);
// Intent myIntent = new Intent(ImageThumbnailsActivity.this, Editor.class);
// ImageThumbnailsActivity.this.startActivity(myIntent);
}
});
}
これは、アダプター メソッドの getview のセクションです。
public View getView(int position,View convertView,ViewGroup parent) {
System.gc();
if (convertView == null) {
// Make up a new view
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.image_item, null);
} else {
// Use convertView if it is available
view = convertView;
}
PanoramioItem s = mImageManager.get(position);
ImageView i = (ImageView) view.findViewById(R.id.image);
i.setImageBitmap(s.getBitmap());
i.setBackgroundResource(R.drawable.picture_frame);
TextView t = (TextView) view.findViewById(R.id.title);
t.setText(s.getTitle());
t = (TextView) view.findViewById(R.id.owner);
t.setText(s.getOwner());
return view;
}
View view;
ImageView iv = new ImageView(mContext.getApplicationContext());
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.activity_adapterview, null);
} else {
// Use convertView if it is available
view = convertView;
}
// Toast.makeText(ImageThumbnailsActivity.this, "image_column_index2: " + image_column_index, Toast.LENGTH_SHORT).show();
imagecursor.moveToPosition(position);
int id = imagecursor.getInt(image_column_index);
Uri uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, ""+ id);
String imagePath = getRealPathFromURI(uri);
String[] titleText = { MediaStore.Images.Media.DATA, MediaStore.Images.Media.TITLE };
textcursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, titleText, MediaStore.Images.Media.DATA + "='" + imagePath +"'",null, null);
if(textcursor.moveToFirst()){
titleString = (String) textcursor.getString(textcursor.getColumnIndex(MediaStore.Images.Media.TITLE));
textcursor.close();
}
else{
titleString = "";
}
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inJustDecodeBounds = true;
Bitmap bm = BitmapFactory.decodeFile(imagePath, bfo);
int imageHeight = bfo.outHeight;
int imageWidth = bfo.outWidth;
String imageType = bfo.outMimeType;
BitmapFactory.Options bfo2 = new BitmapFactory.Options();
int reqHeight = 50;
int reqWidth = 50;
if (imageHeight > reqHeight || imageWidth > reqWidth) {
if (imageWidth > imageHeight) {
bfo2.inSampleSize = Math.round((float)imageHeight / (float)reqHeight);
} else {
bfo2.inSampleSize = Math.round((float)imageWidth / (float)reqWidth);
}
}
Bitmap bm2 = BitmapFactory.decodeFile(imagePath, bfo2);
// iv.setImageBitmap(bm2);
ImageView i = (ImageView) view.findViewById(R.id.adapterimageview);
i.setImageBitmap(bm2);
TextView t = (TextView) view.findViewById(R.id.adaptertextview);
t.setText(titleString);
// iv.setImageURI(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, ""+ id));
view.setLayoutParams(new GridView.LayoutParams(103, 103));
return view;
}