在自己做一个简单的APP过程中,使用了ViewPager这一部件来实现图片轮播,在轮播过程中出现了很多问题,比如说掉帧的问题,也就是在加载图片时UI进程做了太多的操作导致skip.接下来就来探讨一下这个问题
//将图片装载到数组中,这里新开了一个数组用来存,到最后addAll到一个static数组进行操作,如果不这样做将会出现空指针错误。
new Thread() {
public void run() {
ImageView imageView1 = new ImageView(MainActivity.this);
ImageView imageView2 = new ImageView(MainActivity.this);
ImageView imageView3 = new ImageView(MainActivity.this);
ImageView imageView4 = new ImageView(MainActivity.this);
ArrayList<ImageView> mmImageViews = new ArrayList<>();
imageView1.setBackgroundResource(imgIdArray[0]);
mmImageViews.add(imageView1);
imageView2.setBackgroundResource(imgIdArray[1]);
mmImageViews.add(imageView2);
imageView3.setBackgroundResource(imgIdArray[2]);
mmImageViews.add(imageView3);
imageView4.setBackgroundResource(imgIdArray[3]);
mmImageViews.add(imageView4);
mImageViews.addAll(mmImageViews);
Message msg = new Message();
msg.what = 0;
mHandler.sendMessage(msg);
}
}.start();
//实现Handle机制,在这里刷新UI
public Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
viewPager.setAdapter(pageradapter);
//设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
viewPager.setCurrentItem((mImageViews.size()) * 100);
viewPager.setOnPageChangeListener(MainActivity.this);
break;
case 1:
listView = (ListView) findViewById(R.id.listview);
list_Adapter myListAdapter = new list_Adapter(MainActivity.this, informations);
listView.setOnItemClickListener(MainActivity.this);
listView.setAdapter(myListAdapter);
default:
break;
}
super.handleMessage(msg);
}
};
总结:
开始的时候报空指针错误是因为没有把刷新UI放到Handle里而且没有子线程中获取的数组没有通过static数组传递出来,这样直接使用时就会报空指针错误。