- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个图像选取方法,它允许用户从他们的图库中选择图像。
一旦选择了图像,应用程序就会变得非常滞后,页面上有 3 个文本框,当您单击它们时,键盘大约需要 3 秒才能出现,并且会出现滞后阶段。
LogCat 警告:
12-03 19:03:35.536 10842-10842/.com. I/Choreographer﹕ Skipped 58 frames! The
application may be doing too much work on its main thread.
所以,我尝试将图像选择器放在一个新线程上,但是方法太多,无法单独封装。
像这样简单的任务,性能低下的常见问题/解决方案是什么?
代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_submit);
imageView = (ImageView) findViewById(R.id.submitImageButton);
button = (ImageView) findViewById(R.id.submitImageButton);
}
public void pickPhoto(View view) {
new Thread(new Runnable() {
public void run() {
// launch the photo picker
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), SELECT_PICTURE);
}
}).start();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
try {
Bitmap bitmap = getPath(data.getData());
Log.i("Bitmap", "Bmp: " + data.getData());
imageView.setImageBitmap(bitmap);
}catch (Exception e){
Log.e("Error", "Error with setting the image. See stack trace.");
e.printStackTrace();
}
}
}
private Bitmap getPath(Uri uri) {
button.setEnabled(false);
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
cursor.moveToFirst();
String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
cursor.close();
// Convert file path into bitmap image using below line.
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
filePathForUpload = filePath;
try {
ExifInterface exif = new ExifInterface(filePath);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
bitmap = rotateBitmap(bitmap, orientation);
}catch (Exception e){
Log.d("Error", "error with bitmap!");
e.printStackTrace();
}
return bitmap;
}
public static Bitmap rotateBitmap(Bitmap bitmap, int orientation) {
Matrix matrix = new Matrix();
switch (orientation) {
case ExifInterface.ORIENTATION_NORMAL:
return bitmap;
case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
matrix.setScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.setRotate(180);
break;
case ExifInterface.ORIENTATION_FLIP_VERTICAL:
matrix.setRotate(180);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_TRANSPOSE:
matrix.setRotate(90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.setRotate(90);
break;
case ExifInterface.ORIENTATION_TRANSVERSE:
matrix.setRotate(-90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix.setRotate(-90);
break;
default:
return bitmap;
}
Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
bitmap.recycle();
return bmRotated;
}
最佳答案
您应该将位图创建放在单独的线程上(即 getPath(...) 和rotateBitmap(...),而不是您选择照片的 Intent (pickPhoto(View view))。
此外,为什么不直接在 ImageView 上设置位图并使用 View.setRotation(float x) 来旋转位图,而不是通过创建新位图来旋转位图?这样,您就不会在每次旋转图像时创建新的位图。
关于java - 选择图片后 Android 性能很糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279787/
我想在这里说的是我在从之前离开的相同状态重新启动我的应用程序时遇到的问题。我在这方面做了很多研发,并且已经解决了 stackoverflow 中发布的问题。所以请不要说它是重复的。 我试过设置这些选项
当我在我的类中实现 __cmp__ 函数时,python 是否会在内部重载“==”,我们在 C++ 中是如何做到的? 只是好奇。我是 python 的新手。 :) 最佳答案 ==的含义当您定义 __c
我在 Raspberry Pi2 上安装了 Gitlab,几个月来它运行良好。但自从关闭了RPi的电源后,它就不再起作用了。网页返回502错误。 502 Whoops, GitLab is takin
有人知道用户登陆带有Webfonts的页面时为什么Google Chrome浏览器崩溃吗 它并不会一直发生,而是经常发生 我刚得到一个蓝屏页面,却不知道为什么:该页面不是来自重定向时就很好了。 这是我
当我登录时,Skype始终会给出此错误。 糟糕,Skype存在问题。尝试注销然后重新登录。 STARTUP_LOAD_ERROR MACBOOK 最佳答案 Macbook 用户 退出Skype 回家
我正在尝试从 flutter 开始,首先我在 cmd 上运行 flutter doctor 它有效。在我安装了 ANDROID SDK 之后,同样的命令 flutter doctor 给了我异常:
从 android studio 终端运行 flutter attach 不工作。显示错误flutter 意外退出。 终端输出: flutter attach Checking for adverti
当使用 TinyMCE 4 测试所有浏览器时,Chrome 非常慢。 (我尝试从 TinyMCE 中删除所有插件,但没有任何区别。) Chrome 需要大约 20-25 秒在 TinyMCE 中呈现一
我试图让下面的脚本工作,以便从远程服务器(服务器 1)读取特定目录中的 CSV 文件列表,并将数据移植到另一台服务器的 PostgreSQL 数据库中。 我已经创建了一个 rsa SSH key 并将
在嵌入式 linux 环境中(在 PowerPC 上定制的 2.4.25)几个小时后我得到以下内核 panic : Oops: kernel access of bad area, sig: 11 N
在将现有 Node.js (Hapi.js) + RethinkDB 从 OVH VPS(最小 vps)迁移到 AWS Lambda( Node )+ DynamoDB 的过程中,我最近遇到了一个非常
我是一名优秀的程序员,十分优秀!