4/17学习总结:handler

今天主要完成了院校页面的布局文件和逻辑代码。

目标效果如下:在EditView中输入想要搜索的院校,点击查询按钮,显示分数线,报录比,经验,加入讨论组的详细内容

遇到的问题:在显示主要内容的TextView时,开始无法显示(已解决)

明天的目标:制作下拉刷新效果

下面来进行一下总结:

一  Handler:

Handler是Android SDK中处理异步类消息的核心类,其作用是让子线程通过与UI通信来更新UI界面 
总结起来也可以这样说: 
1.当应用程序启动时,会初始化一个UI线程 
2.UI线程中创建了Looper,所以是一个循环工作线程 
3.创建Looper时,Looper会创建一个MessageQueue 

4.UI中的Looper会不断从MessageQueue中取出消息

二  基本原理

开辟一个线程,当需要进行一些耗时的操作时,线程向主线程发送一个消息(Message),这个消息会进入到一个队列中(MessageQueue),而Looper会取出这些消息,交给主线程处理。

三 一些常用的方法:

获取Message对象:

1.Message messag =new Message();这样的方法需要开辟一片空间,占内存

2.Message nessage=handler.obtainMessage();从当前线程中取出一个Message,handler是Handler对象

Message的一些常用属性:

message.what:是用户定义的消息代码,以便收件人能识别这条消息是关于什么的

message.obj:如果需要存储object类型,可以使用这个属性

message.arg1(arg2)如果需要存储一些整型可直接使用这两个属性

Handler的一些常用方法:

handler.obtainMessage();获得一个Message

handler.sendMessage(message):发送一个message

handleMessage(message):上一个方法传过来的的message交由此方法处理

三  主要代码

package com.example.kaoyanpai.ui.home;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

import com.example.kaoyanpai.DBService;
import com.example.kaoyanpai.R;
import com.example.kaoyanpai.school;

import java.util.List;

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;
    private Button button;
    private EditText editText;
    private TextView textView;
    @SuppressLint("HandlerLeak")
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Log.i("789","789");
            switch (msg.what){
                case 0x11:
                    String s = (String) msg.obj;
                    textView.setText(s);
                    Log.i("message","123");
                    break;
                case 0x12:
                    String ss = (String) msg.obj;
                    textView.setText(ss);
                    break;
            }

        }
    };
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        homeViewModel =
                ViewModelProviders.of(this).get(HomeViewModel.class);
        View root = inflater.inflate(R.layout.fragment_home, container, false);
        final TextView textView = root.findViewById(R.id.text_home);
        homeViewModel.getText().observe(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                textView.setText(s);
            }
        });
        onStart(root);
        return root;

    }


    protected void onStart(View v){
          button=(Button)v.findViewById(R.id.button3);
          editText=(EditText)v.findViewById(R.id.schoolname);
          textView=(TextView)v.findViewById(R.id.show);
          button.setOnClickListener(new View.OnClickListener(){

              @Override
              public void onClick(View v) {
                  //创建一个线程
                  new Thread(new Runnable() {
                      @Override
                      public void run() {
                          Looper.prepare();
                  
                          Message message=handler.obtainMessage();
                          message.what=0x11;
                          message.obj="chenggong";
                          handler.sendMessage(message);
                      }
                  }).start();
              }
          });
    }

}

猜你喜欢

转载自www.cnblogs.com/wangzhaojun1670/p/12722091.html