在自己做一个简单的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数组传递出来,这样直接使用时就会报空指针错误。