在android应用程序中使用Cache

在android应用程序中使用Cache,android,caching,image-caching,Android,Caching,Image Caching,我正在开发一个android应用程序,其中有一个功能,可以使用asynctask加载一些图像。我认为,如果我能将这些图像保存为缓存,我可以提高应用程序的性能,因为我正在加载大量图像。我该怎么做?如何在android应用程序中保留缓存 我的班级 public class MovieFragment extends Fragment { private ViewPager viewPager; private PageAdapter pageAdapter; private

我正在开发一个android应用程序,其中有一个功能,可以使用asynctask加载一些图像。我认为,如果我能将这些图像保存为缓存,我可以提高应用程序的性能,因为我正在加载大量图像。我该怎么做?如何在android应用程序中保留缓存

我的班级

public class MovieFragment extends Fragment {

    private ViewPager viewPager;
    private PageAdapter pageAdapter;
    private ViewPageAdapter adapter;
    private ArrayList<BaseElement> filmCategory;
    private Fragment fragment;
    private Activity activity;
    private CommonVariable commonVariable;
    private FilmCategory category;
    private Dialog dialog;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.movie_fragment, container, false);

        fragment = this;

        activity = this.getActivity();

        commonVariable = (CommonVariable) activity.getApplication();



        viewPager = (ViewPager) view.findViewById(R.id.news_page_viewpager);

        dialog = new Dialog(this.getActivity(),
                android.R.style.Theme_Translucent_NoTitleBar);


        new BackGround().execute();

        return view;
    }

    public class BackGround extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            filmCategory = JSONServices.getCategory();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {

            commonVariable.setCategory(filmCategory);

            if (filmCategory != null) {

                pageAdapter = new PageAdapter(
                        fragment.getChildFragmentManager(), filmCategory,
                        activity);

                viewPager.setAdapter(pageAdapter);

            } else {

                Toast.makeText(activity, "No Active Internet Connection",
                        Toast.LENGTH_LONG).show();

            }

            dialog.dismiss();

            viewPager.setOnPageChangeListener(new OnPageChangeListener() {

                @Override
                public void onPageSelected(int position) {
                    // TODO Auto-generated method stub
                    // commonVariable.setFilmDetails((FilmCategory)
                    // category.getFilm().get(position));

                }

                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {

                    // TODO Auto-generated method stub

                }

                @Override
                public void onPageScrollStateChanged(int arg0) {

                    // TODO Auto-generated method stub

                }
            });

            super.onPostExecute(result);
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            dialog.setContentView(R.layout.dialog);
            dialog.show();
            super.onPreExecute();

        }

    }
公共类电影片段扩展片段{
私人视页机视页机;
专用页面适配器;
专用可视页面适配器;
私人ArrayList电影类别;
私有片段;
私人活动;
私有公共变量公共变量;
私人电影类别;
私人对话;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.movie_碎片,容器,假);
片段=这个;
activity=this.getActivity();
commonVariable=(commonVariable)activity.getApplication();
viewPager=(viewPager)view.findViewById(R.id.news\u page\u viewPager);
dialog=新建对话框(this.getActivity(),
android.R.style.Theme(半透明的NoTitleBar);
新建背景().execute();
返回视图;
}
公共类后台任务{
@凌驾
受保护的Void doInBackground(Void…参数){
filmCategory=JSONServices.getCategory();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
commonVariable.setCategory(电影类别);
if(filmCategory!=null){
pageAdapter=新的pageAdapter(
fragment.getChildFragmentManager(),filmCategory,
活动);
viewPager.setAdapter(页面适配器);
}否则{
Toast.makeText(活动,“无活动Internet连接”,
Toast.LENGTH_LONG).show();
}
dialog.dismise();
viewPager.setOnPageChangeListener(新的OnPageChangeListener(){
@凌驾
已选择页面上的公共无效(内部位置){
//TODO自动生成的方法存根
//commonVariable.setFilmDetails((FilmCategory)
//category.getFilm().get(position));
}
@凌驾
已滚动页面上的公共void(int arg0、float arg1、int arg2){
//TODO自动生成的方法存根
}
@凌驾
公共无效onPageScrollStateChanged(int arg0){
//TODO自动生成的方法存根
}
});
super.onPostExecute(结果);
}
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
setContentView(R.layout.dialog);
dialog.show();
super.onPreExecute();
}
}

如果您正在从服务器下载图像,我认为Volley库可以帮助您。它将删除样板代码,并且易于阅读。它还支持缓存。如果您想实现缓存,请遵循链接。请避免asyctask,它将无法在配置更改后继续运行。使用asynctaskLoader:-)

似乎这可能是最简单的方法o使用第三方库,如,或

在尝试实施图像缓存系统之前,我会先检查这些选项。在大多数情况下,这三个选项中的一个将处理您需要完成的所有任务。

这可能会有所帮助: