我正在使用以下代码
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) {
}
}
这里所有功能都运行正常,但我的问题是异步任务下载的数据太慢了。
我认为问题是每次都要创建一个新任务。
请建议我如何克服这个问题。
答案 0 :(得分:0)
@Prakash:使用ViewPager时有一个问题。 ViewPager将开始为下两个片段准备视图,并且当您通过System调用ViewPager的活动时,ViewPager将创建您在FragmentPagerAdapter中定义的后两个视图。
您可以使用setOffscreenPageLimit(pagestoCache)来最小化此功能。
Prakash,现在只有当片段对用户可见时才需要调用asyn任务,如果用户移出当前片段,则必须取消。为什么我要问,因为如果你没有取消Aync任务,将有很多线程将在应用程序空间中运行。如果您可以在代码中使用ThreadPoolExecutor,也可以查询。
答案 1 :(得分:0)
您是否意识到Android不会并行运行AsyncTasks?如果你连续启动了很多AsyncTasks,它们会排队并一个接一个地执行吗?
您可以使用executeOnExecutor(...)
代替常规execute()
来解决此问题。