iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android在子线程中怎么调用Handler
  • 372
分享到

Android在子线程中怎么调用Handler

2023-07-04 17:07:58 372人浏览 薄情痞子
摘要

这篇文章主要介绍“Android在子线程中怎么调用Handler”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android在子线程中怎么调用Handler”文章能帮助大家解决问题。简介如果是Han

这篇文章主要介绍“Android在子线程中怎么调用Handler”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android在子线程中怎么调用Handler”文章能帮助大家解决问题。

简介

如果是Handler写在了子线程中的话,我们就需要自己创建一个Looper对象了:创建的流程如下:

  • 直接调用Looper.prepare()方法即可为当前线程创建Looper对象,而它的构造器会创建配套的MessageQueue;

  • 创建Handler对象,重写handleMessage( )方法就可以处理来自于其他线程的信息了!

  • 调用Looper.loop()方法启动Looper

使用示例

输入一个数,计算后通过Toast输出在这个范围内的所有质数,如下截图。

Android在子线程中怎么调用Handler

前端代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="Http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <EditText        android:id="@+id/inputNum"        android:inputType="number"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="请输入计算范围"/>    <Button        android:id="@+id/buttonCalc"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="开始计算"/></LinearLayout>

很简单,前端有一个输入框一个按钮。

来看后端代码

后端代码

package org.mk.android.demo; import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; import java.util.ArrayList;import java.util.List; public class MainActivity extends AppCompatActivity {     private static final String INPUT_NUM = "inputNum";    private EditText inputNum;    private Button buttonCal;    CalThread calThread;     class CalThread extends Thread    {        public Handler mHandler;         public void run()        {            Looper.prepare();            mHandler = new Handler(new Handler.Callback() {                @Override                public boolean handleMessage(@NonNull Message msg) {                    if(msg.what == 101)                    {                        int inputNum = msg.getData().getInt(INPUT_NUM);                        List<Integer> nums = new ArrayList<Integer>();                        // 计算从2开始、到upper的所有质数                        outer:                        for (int i = 2 ; i <= inputNum ; i++)                        {                            // 用i处于从2开始、到i的平方根的所有数                            for (int j = 2 ; j <= Math.sqrt(i) ; j++)                            {                                // 如果可以整除,表明这个数不是质数                                if(i != 2 && i % j == 0)                                {                                    continue outer;                                }                            }                            nums.add(i);                        }                        // 使用Toast显示统计出来的所有质数                        Toast.makeText(MainActivity.this , nums.toString()                                , Toast.LENGTH_LONG).show();                    }                    return false;                }            });             Looper.loop();        }    }    public void cal(View source)    {        // 创建消息        Message msg = new Message();        msg.what = 101;        Bundle bundle = new Bundle();        bundle.putInt(INPUT_NUM ,                Integer.parseInt(inputNum.getText().toString()));        msg.setData(bundle);        // 向新线程中的Handler发送消息        calThread.mHandler.sendMessage(msg);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        buttonCal=(Button)findViewById(R.id.buttonCalc);        inputNum=(EditText)findViewById(R.id.inputNum);        buttonCal.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                cal(view);            }        });        calThread=new CalThread();        calThread.start();    }}

后端代码我们使用的是求给定数字范围内有几个质数里比较高效的一种算法

关键在于:

  • 使用线程,在线程开始我们使用:Loop.prepare,在运算完后使用Loop.loop();

  • 使用mHandler = new Handler(new Handler.Callback()进行监听;

  • 使用message发送主界面输入的“质数”给到在监听的mHandler;

  • 当mHandler监听到有消息到达后开始运算质数集,运算后把结果以Toast输出

关于“Android在子线程中怎么调用Handler”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Android在子线程中怎么调用Handler

本文链接: https://www.lsjlt.com/news/346641.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android在子线程中怎么调用Handler
    这篇文章主要介绍“Android在子线程中怎么调用Handler”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android在子线程中怎么调用Handler”文章能帮助大家解决问题。简介如果是Han...
    99+
    2023-07-04
  • Android入门之在子线程中调用Handler详解
    目录简介本章示例前端代码后端代码简介 前一章我们以一个简单的小动画来解释了Handler。 这章我们会介绍在子线程里写Handler。如果是Handler写在了子线程中的话,我们就需...
    99+
    2022-12-08
    Android子线程调用Handler Android调用Handler Android 子线程 Handler
  • Android如何实现使用handler在子线程中更新UI示例
    小编给大家分享一下Android如何实现使用handler在子线程中更新UI示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MainActivity代码:pac...
    99+
    2023-05-30
    android handler
  • 怎么在Android中调用光线传感器
    今天就跟大家聊聊有关怎么在Android中调用光线传感器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体如下:activity如果要使用传感器,就必须实现SensorEventLi...
    99+
    2023-05-30
    android
  • Android线程间通信Handler使用详解
    目录前言01、定义02、使用第一步、创建第二步、发送消息第一种是 post(Runnable)第二种是 sendMessage(Message)第三步、处理消息03、结语前言 Han...
    99+
    2022-11-13
    Android线程通信Handler Android Handler
  • 怎么在Android中使用线程池
    本篇文章为大家展示了怎么在Android中使用线程池,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 、newCachedThreadPool这种线程池比较灵活,也就是说它的池里的线程数量并不是固定...
    99+
    2023-05-30
    android 线程池
  • Android 中Handler有什么用
    Android 中Handler有什么用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android Handler的详解Handler我们常常用于通知主线程做...
    99+
    2023-05-30
    android handler
  • 怎么在Android中调用红外线遥控功能
    怎么在Android中调用红外线遥控功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:public class ConsumerI...
    99+
    2023-05-30
    android
  • Android中主线程和子线程有什么不同
    这篇文章给大家介绍Android中主线程和子线程有什么不同,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。主线程和子线程的区别每个线程都有一个唯一标示符,来区分线程中的主次关系的说法。 线程唯一标示符:Thread.Cu...
    99+
    2023-05-30
    android
  • 怎么在Android中调用WebService
    怎么在Android中调用WebService?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。WebService是一种基于SOAP协议的远程调用标准,通过webservic...
    99+
    2023-05-30
    android webservice
  • Android中Handler有什么作用
    这篇文章主要讲解了“Android中Handler有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中Handler有什么作用”吧!在性能优化方面考虑,Android的U...
    99+
    2023-06-04
  • 如何在Android中使用Handler删除Message
    今天就跟大家聊聊有关如何在Android中使用Handler删除Message,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android Handler移除Message详解问题:...
    99+
    2023-05-31
    android handler message
  • Android Loop机制中Looper与handler怎么使用
    今天小编给大家分享一下Android Loop机制中Looper与handler怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我...
    99+
    2023-07-04
  • Android中怎么利用Handler防止内存泄露
    今天就跟大家聊聊有关Android中怎么利用Handler防止内存泄露,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 Handler可能导致的内存泄露及其优化 &...
    99+
    2023-05-30
    android handler
  • Android 在子线程中更新UI的几种方法示例
    本文介绍了Android 在子线程中更新UI的几种方法示例,分享给大家,具体如下:方式一:Handler和Message① 实例化一个Handler并重写handlerMessage()方法private Handler handler =...
    99+
    2023-05-30
    android 子线程 更新ui
  • Android中怎么在后台实现多线程
    Android中怎么在后台实现多线程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。后台功能是Android的四大组件之一,其重要程度自然不言而喻,而服务是Android中实现程...
    99+
    2023-06-04
  • 怎么在android中使用Palette调色板
    本篇文章为大家展示了怎么在android中使用Palette调色板,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Palette可以提取的颜色:Vibrant (有活力的)Vibrant dark(有...
    99+
    2023-05-30
    android palette
  • Java线程同步如何在不同线程中调用
    本篇文章为大家展示了Java线程同步如何在不同线程中调用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java线程同步需要我们大家不断的学习,但是在学习的时候有些重要的代码还是需要注意,下面我们就来...
    99+
    2023-06-17
  • Android中创建子线程的方式详解
    在 Android 中,创建子线程的方式通常有以下几种: 使用 Thread 类进行创建 Thread 是 Java 中的一个类,可以通过继承 Thread 类或者创建 Thread...
    99+
    2023-05-18
    Android创建子线程方式 Android创建子线程 Android子线程
  • 怎么在Android中调用发送的短信
    怎么在Android中调用发送的短信?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。功能:调用发送短信功能1 、 权限 <uses-permission an...
    99+
    2023-05-30
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作