减少Android中ImageView中图像的加载时间



我有一个ImageView和一个按钮以及两个图像。单击该按钮可切换ImageView中的图像。

这是代码

protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this );
        flag = true; 
        imageView1 = (ImageView ) findViewById(R.id.imageView1);
        imageView1.setImageResource(R.drawable.off);
    } 
    @Override
    public void onClick(View  v) 
    {
        // TODO Auto-generated method stub
    //  imageView1.setImageResource(R.id.);
        //imageView1.setImageResource(R.drawable.off_widget);
          flag= !flag;
        if( flag == true  )
        {
            imageView1.setImageResource(R.drawable.off);
        }
        else
        {
            imageView1.setImageResource(R.drawable.on);
        }

但是加载时间非常长。图像的大小分别为188 KB和110 KB。我能做些什么来减少加载时间?

这里的问题不在于加载时间,即使是200KB的图像也没有那么大。您的GUI实际上会因加载图像而冻结很短时间(加载图像所需的时间)。这会导致切换。

防止GUI冻结的最佳实践是将图像加载到AsyncTask中作为Drawable,然后将其分配给ImageView。你可以在这里找到一个代码示例。您只需从onCreate(...)onStart(...)调用该任务。将DrawableAsyncTask转移到主活动的另一个最佳实践是使用Observer模式,其中AsyncTask是Observer,而主活动是Observable。Android已经为此提供了prober类。您也可以在这里找到一个代码示例。

您将断断续续的图像存储在哪里?您是否为每个屏幕密度创建了缩放版本?

当您将100kb的图像添加到drawable目录(而不是drawable-)时,该图像将被视为mdpi图像,因此会根据设备的密度进行缩放。因此,drawable目录中的png在xxhdpi设备上占用的内存要比100kb多得多。