java - 在 onCreate 中加载位图会使 Activity 启动缓慢

标签 java android bitmap

我是 android 编程的新手,最近一直在学习开发一些应用程序。在我遇到处理图像之前,这并不是什么大问题。我正在尝试开发一个更像电子书的简单应用程序,它显示存储在可绘制文件夹中的图片 (JPEG/PNG)。

我的第一个方法是使用 Gallery 小部件,但我无法用它实现适当的缩放。所以我现在使用一个简单的 Imageview 一次显示一个位图,并在触摸事件时更改或缩放位图。为此,我必须在 Activity 启动期间将所有位图解码为位图数组,以便我可以随时使用它们。

我的应用程序在我的 Galaxy Tab 上启动正常,但除此之外的所有手机都需要大约 3-5 秒才能启动。我只是想知道是否有一种在启动期间加载位图的简单方法。如果我的问题已经被问到,请原谅我,但我搜索了很多计算器,但找不到我的问题的具体答案。这是我的代码。希望有人能提供帮助。

    package ....

    imports ....

    public class ImageViewFlipper extends Activity {

    private ViewFlipper viewFlipper;
    private Bitmap[] bMap= new Bitmap[15];
    private TextView currentpage;
    private ImageViewZoom iv;
    private imagenum=3;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    bMap[0] =BitmapFactory.decodeResource(getResources(), R.drawable.page);
    bMap[1] =BitmapFactory.decodeResource(getResources(), R.drawable.page1);
    bMap[2] =BitmapFactory.decodeResource(getResources(), R.drawable.page10);
    bMap[3] =BitmapFactory.decodeResource(getResources(), R.drawable.page11);
    bMap[4] =BitmapFactory.decodeResource(getResources(), R.drawable.page12);
    bMap[5] =BitmapFactory.decodeResource(getResources(), R.drawable.page13);
    bMap[6] =BitmapFactory.decodeResource(getResources(), R.drawable.page14);
    bMap[7] =BitmapFactory.decodeResource(getResources(), R.drawable.page2);
    bMap[8] =BitmapFactory.decodeResource(getResources(), R.drawable.page3);
    bMap[9] =BitmapFactory.decodeResource(getResources(), R.drawable.page4);
    bMap[10] =BitmapFactory.decodeResource(getResources(), R.drawable.page5);
    bMap[11] =BitmapFactory.decodeResource(getResources(), R.drawable.page6);
    bMap[12] =BitmapFactory.decodeResource(getResources(), R.drawable.page7);
    bMap[13] =BitmapFactory.decodeResource(getResources(), R.drawable.page8);
    bMap[14] =BitmapFactory.decodeResource(getResources(), R.drawable.page9);

    currentpage=(TextView)findViewById(R.id.textview);
    iv = (ImageViewZoom) findViewById(R.id.zero);
    iv.setImageBitmapReset( bMap[imagenum], 0, true );
    viewFlipper = (ViewFlipper) findViewById(R.id.flipper);
    ......

imagenum的值根据onFling方法变化,ImageViewZoom是自定义的ImageView类。我希望这些信息足够了。

最佳答案

我建议将所有位图加载到 AsyncTask 中你在 onCreate 里面开始。设计您的 Activity 以在加载所有图像之前显示一些合理的内容。 AsyncTask 可以加载所有图像并在 onPostExecute 中传送它们,也可以在使用 onProgressUpdate 加载时传送每个图像。

关于java - 在 onCreate 中加载位图会使 Activity 启动缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674078/

相关文章:

android - Application 实例是否总是在任何 Activity 之前创建?

java - 如何使用 Android Beam 确认我的消息已收到?

java - 将数据从可搜索 Activity 返回到上一个 Activity

php - 使用 PHP 和 ImageMagick 以编程方式将 RGB 图像转换为 1 位灰度 (b/w) 位图图像

c++ - MFC 将部分屏幕复制到 CBitmap 中

java - 位图()不公开

java - 有人试过在 HP-UX 上安装 Liferay Portal CE 吗?

Java分布式架构和版本控制

java - 如何使用排列字符串迭代二维数组?

java - 谷歌云消息 : BroadcastReceiver or Service?