我在tablayout中切换标签时出现性能问题。在方案一中,当我的记录较少时,我可以轻松地在标签之间切换,用户不会收取任何延迟费用。当我有更多数据时,用户可以感觉到滞后,如下面的屏幕截图所示。虽然几秒后屏幕加载,但用户非常清楚。有人建议我可以检查的区域,以进一步改善这一点。以下是问题和当前的片段代码......
用户界面 -
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_profile, container, false);
dbConnection = new databaseHelper(getContext());
dbConnection.getWritableDatabase();
profileFragment = view.findViewById(R.id.profileFragment);
downloadData = profileFragment.findViewById(R.id.dwnldData);
refresh = profileFragment.findViewById(R.id.refreshdata);
search = profileFragment.findViewById(R.id.search);
removeFilter= profileFragment.findViewById(R.id.removeFilter);
viewPager = (ViewPager) getActivity().findViewById(R.id.viewpager);
currmelas = dbConnection.findMelas("YES","YES","");
downloadData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
viewPager.setCurrentItem(0);
}
});
if (viewPager.getCurrentItem()==1){
candidateData = dbConnection.findHighCandData(mela_id,"1","");
} else {
candidateData = dbConnection.findHighCandData(mela_id,"","");
}
if (candidateData.size() <= 0) {
if (currmelas.size() == 0 ){
downloadData.setVisibility(View.VISIBLE);
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
if(userSettings.size()==0){
viewPager.setCurrentItem(3);
} else {
viewPager.setCurrentItem(0);
}
}
});
}
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
setScrollView(candidateData);
}
});
}
}, 100);
}
return view;
}
答案 0 :(得分:1)
移动数据加载到后台工作程序,不要在UI线程上加载信息。这样,在Tab切换之间抓取内容时不会延迟。我有同样的问题,不得不将我的所有数据加载到单独的线程,以启用干净平滑的UI。加载后,请确保已设置缓存页面数量的屏幕限制,以保持重要的一切,以避免在每次滑动时重新加载。
更多信息here
答案 1 :(得分:0)
只是想分享我的解决方案,以便对其他人有所帮助。在我的代码中,我在循环中加载配置文件,所以每当我有大约200个配置文件时,它会花费时间加载,用户可以看到滞后。正如@Sam提到的,我在下面的处理程序中移动了代码,它解决了我的问题。现在系统立即显示标签,数秒在几秒钟后加载,这比早先的滞后更好。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
setScrollView(candidateData);
}
});
}
}, 100);