Android --> Handler基本使用


Handler基本使用

public class MainActivity extends AppCompatActivity {
	/**
     * 這里的list如果不使用handler,由於是網絡資源,加載需要時間,在當我們進行加載ui是
     * 很可能list為空,或者沒有全部加載完成
     */
    private List<Bitmap> list2 = new ArrayList<>();
    Handler handler;
    @SuppressLint("HandlerLeak")
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        final ViewFlipper root = findViewById(R.id.test_view);
        //在主線程里添加handler實例
        handler = new Handler(){//匿名實現類
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what == 1) {//加載完成
                    //更新ui
                    for (Bitmap bitmap : list2) {
                        ImageView view = new ImageView(MainActivity.this);
                        view.setImageBitmap(bitmap);
                        root.addView(view, list2.indexOf(bitmap));
                        System.out.println(root.getChildCount());
                    }
                }
            }
        };
        //2.加載網絡
        new Thread(new Runnable() {
            //子線程發送Message給UI線程表示自己任務已經執行完成,主線程可以做相應的操作了。
            @Override
            public void run() {
                Bitmap bitmap1 = returnBitMap("http://129.211.190.120/restaurant/1.png");
                Bitmap bitmap2 = returnBitMap("http://129.211.190.120/restaurant/2.png");
                Bitmap bitmap3 = returnBitMap("http://129.211.190.120/restaurant/3.png");
                Bitmap bitmap4 = returnBitMap("http://129.211.190.120/restaurant/4.png");
                Bitmap bitmap5 = returnBitMap("http://129.211.190.120/restaurant/5.png");
                Bitmap bitmap6 = returnBitMap("http://129.211.190.120/restaurant/6.png");
                Bitmap bitmap7 = returnBitMap("http://129.211.190.120/restaurant/7.png");
                list2.add(bitmap1);
                list2.add(bitmap2);
                list2.add(bitmap3);
                list2.add(bitmap4);
                list2.add(bitmap5);
                list2.add(bitmap6);
                list2.add(bitmap7);
                //步驟3:創建所需的消息對象
                Message msg = Message.obtain();
                msg.what = 1; // 消息標識
                // 步驟4:在工作線程中 通過Handler發送消息到消息隊列中
                //handler在發送消息時,message就持有了這個handler的引用
                handler.sendMessage(msg);
            }
        }).start();
    }
     //請求網絡圖片
    private Bitmap returnBitMap(String url) {

        Bitmap bitmap = null;
        try {
            URL myFileUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    <ViewFlipper
            android:layout_width="300dp"
            android:layout_height="300dp"
            android:inAnimation="@android:anim/slide_in_left"
            android:outAnimation="@android:anim/slide_out_right"
            android:flipInterval="2000"
            android:autoStart="true"
            android:layout_gravity="center"
            android:id="@+id/test_view">
    </ViewFlipper>
</LinearLayout>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM