为什么我的异步任务在寻呼机适配器中使用时太慢了

时间:2014-12-29 08:51:32

标签: android android-asynctask android-pageradapter

我正在使用以下代码

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
SectionsPagerAdapter mSectionsPagerAdapter= new SectionsPagerAdapter(
                getSupportFragmentManager());

mViewPager.setAdapter(mSectionsPagerAdapter);

My SectionsPagerAdapter  class is 

public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(android.support.v4.app.FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a DummySectionFragment (defined as a static inner class
            // below) with the page number as its lone argument.
            Fragment fragment = new DummySectionFragment();
            Bundle args = new Bundle();
            args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public int getCount() {
            int numpages = 0;

            numpages=5;

            return numpages;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            // Locale l = Locale.getDefault();

            String chnl_name = "";
            switch (language) {
            case 1:
                chnl_name = Constants.telugu_channels[position];
                break;
            case 2:
                chnl_name = Constants.tamil_channels[position];
                break;
            case 3:
                chnl_name = Constants.english_channels[position];
                break;
            case 4:
                chnl_name = Constants.hindi_channels[position];
                break;
            }

            return chnl_name;
        }
    }

和片段类是

// enter code here

public static class DummySectionFragment extends Fragment {

        GridView gridplaylst;
        ProgressBar progress;

        Play_list playlist;
        public static final String ARG_SECTION_NUMBER = "section_number";

        public DummySectionFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_grid, container,
                    false);

            // dummyTextView.setText(Integer.toString(getArguments().getInt(
            // ARG_SECTION_NUMBER)));

            gridplaylst = (GridView) rootView.findViewById(R.id.gridplaylst);
            progress = (ProgressBar) rootView.findViewById(R.id.progress);

            if (playlist != null)
                playlist.cancel(true);
            if (language != 0) {
                int a = getArguments().getInt(ARG_SECTION_NUMBER);

                switch (language) {

                case 1:

                    playlist = new Play_list(
                            Constants.telugu_playlists[getArguments().getInt(
                                    ARG_SECTION_NUMBER) - 1]);
                    playlist.execute();
                    break;
                case 2:

                    new Play_list(Constants.tamil_playlists[getArguments()
                            .getInt(ARG_SECTION_NUMBER) - 1]).execute();

                    break;
                case 3:

                    new Play_list(Constants.english_playlists[getArguments()
                            .getInt(ARG_SECTION_NUMBER) - 1]).execute();

                    break;
                case 4:
                    new Play_list(Constants.hindi_playlists[getArguments()
                            .getInt(ARG_SECTION_NUMBER) - 1]).execute();

                    break;
                }

            }
}

和播放列表是一个像

这样的异步任务
public class Play_list extends AsyncTask<Object, Object, Object> {
protected Object doInBackground(Object... arg0) {

}
}

这里所有功能都运行正常,但我的问题是异步任务下载的数据太慢了。

我认为问题是每次都要创建一个新任务。

请建议我如何克服这个问题。

2 个答案:

答案 0 :(得分:0)

@Prakash:使用ViewPager时有一个问题。 ViewPager将开始为下两个片段准备视图,并且当您通过System调用ViewPager的活动时,ViewPager将创建您在FragmentPagerAdapter中定义的后两个视图。

您可以使用setOffscreenPageLimit(pagestoCache)来最小化此功能。

Prakash,现在只有当片段对用户可见时才需要调用asyn任务,如果用户移出当前片段,则必须取消。为什么我要问,因为如果你没有取消Aync任务,将有很多线程将在应用程序空间中运行。如果您可以在代码中使用ThreadPoolExecutor,也可以查询。

答案 1 :(得分:0)

您是否意识到Android不会并行运行AsyncTasks?如果你连续启动了很多AsyncTasks,它们会排队并一个接一个地执行吗?

您可以使用executeOnExecutor(...)代替常规execute()来解决此问题。