4/17学习总结:handler
Posted wangzhaojun1670
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(); } }); } }
以上是关于4/17学习总结:handler的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio - 如何从片段中停止 handler.postDelayed?