全局Handler的封装

Springboot全局异常处理GlobalExceptionHandler Service层大胆的向上抛就行了,Controller接到这个异常后,也继续抛就行了,完全不用怕,因为,我们上面编写的【GlobalExceptionHandler】会很友好的去处理这个异常,把其转化为API统一返回对象,以符合接口返回的格式;●【@ControllerAdvice】相当于是一个Controller增强器,可对controller中被 @RequestMapping注解的方法(也就是Controller中,那些设置了url,可以接受并处理前端请求的方法),加一些逻辑处理; 阅读详情
       相信大家写Android项目的时候,使用Handler发送消息是非常常见的,可以说在项目中有非常多的地方使用到Handler,于是这时候考虑怎么去封装一个Handler,使用的时候也比较方便,又可以避免重复去创建Handler对象,我们会想到全局就使用一个Handler,那么怎么全局去封装一个Handler的,我是这么来设计的:

      首先定义一个类GlobalHandler,继承Handler,然后重写它的handleMessage()方法,然后我们在内部定义一个HandleMsgListener接口,接口中定义一个处理消息的抽象方法handleMsg(),当handler收到消息后,就会回调handleMessage()去处理消息,然后我们在这个方法去调用我们接口HandleMsgListener中的handleMsg()方法,在使用的时候,用户自己去处理这个消息,具体代码如下:

 

package com.lxz.custom;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

/**
 * Created by Administrator on 2018/4/17 0017.
 */

public class GlobalHandler extends Handler{

    private HandleMsgListener listener;
    private String Tag = GlobalHandler.class.getSimpleName();

    //使用单例模式创建GlobalHandler
    private GlobalHandler(){
        Log.e(Tag,"GlobalHandler创建");
    }

    private static class Holder{
        private static final GlobalHandler HANDLER = new GlobalHandler();
    }

    public static GlobalHandler getInstance(){
        return Holder.HANDLER;
    }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        if (getHandleMsgListener() != null){
            getHandleMsgListener().handleMsg(msg);
        }else {
            Log.e(Tag,"请传入HandleMsgListener对象");
        }
    }

    public interface HandleMsgListener{
        void handleMsg(Message msg);
    }

    public void setHandleMsgListener(HandleMsgListener listener){
        this.listener = listener;
    }

    public HandleMsgListener getHandleMsgListener(){
        return listener;
    }

}

 

package com.lxz.custom;

import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements GlobalHandler.HandleMsgListener{
    private GlobalHandler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mHandler = GlobalHandler.getInstance();
        mHandler.setHandleMsgListener(this);
        mHandler.sendEmptyMessage(0);
        mHandler.sendEmptyMessage(1);
    }


    @Override
    public void handleMsg(Message msg) {
        switch (msg.what){
            case 0:
                Toast.makeText(MainActivity.this,"test0",Toast.LENGTH_SHORT).show();
                break;
            case 1:
                Toast.makeText(MainActivity.this,"test1",Toast.LENGTH_SHORT).show();
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //销毁移除所有消息,避免内存泄露
        mHandler.removeCallbacks(null);
    }
}

GooglePlaySkillPoint 在开发我们下载模块之前,我们单独的写一个类DownloadManager.java 来专门处理我们的下载逻辑,我们全局都要用它下载,我们可以也把它搞成一个单例的。将上边抽取的5条共性写一个自己定义的类来分别处理这些状态,这5种状态可以用一个空的帧布局来表示,这个空的自定类布局为LoadingPage.java。这时候我们又得继续去封装 我们写一个网络访问的最基本的类BaseProtocol 通过这个基本的类把所有的共性抽取到这个类里边来。 阅读详情

相关推荐

深入解读ES8388寄存器:从录音到播放,如何用代码控制这颗音频Codec

本文深入解析ES8388音频编解码器的寄存器设置,从录音到播放的完整控制流程。详细介绍了寄存器架构、录音通道配置、播放通道优化以及直通(Bypass)模式的高级应用,帮助开发者通过代码精准控制这颗高性能音频Codec,解决实际开发中的音质问题。

weixin_30275415的博客 549

android 全局 handler,(转)Android Handler 使用详解

Handler:是一个消息分发对象,进行发送和处理消息,并且其 Runnable 对象与一个线程的 MessageQueue 关联。作用:调度消息,将一个任务切换到某个指定的线程中去执行。为什么需要 Handler?子线程不允许访问 UI假若子线程允许访问 UI,则在多线程并发访问情况下,会使得 UI 控件处于不可预期的状态。传统解决办法:加锁,但会使得UI访问逻辑变的复杂,其次降低 UI 访问的...

weixin_39590453的博客 819

centos 添加新硬盘,对根目录扩容

本地安装了虚拟机,系统为centos7,使用过程中,渐渐地发现磁盘容量不够用了,于是在虚拟机中新增了一块硬盘。 进入系统内查看: sdb是新增的硬盘,大小为40g。 接下来有两种方式,一种是普通方式直接挂载。https://blog.youkuaiyun.com/qq_39314099/article/details/106200322 这样的话只有在挂载点的目录下操作才能使用到这个新硬盘,不是很理想。 还有一种方式lvm,逻辑卷管理的方式。 LVM简单介绍: 它是 Linux 下对磁盘分区进行管

qq_39314099的博客 1万+

【android】项目application全局唯一Handler(接口回调实现)

最近Handler玩嗨了,突发奇想搞一个全局的handler,苦思冥想3三小时,终于搞定! 先在Application中创建Handler和用于回调的接口,并且打印这个接口的地址值(后面测试用) //Application.class private static Handler mHandler = new Handler(Looper.getMainLooper()) { @Ove...

guojiayuan002的博客 5387

R语言clusterProfiler实战:GO与KEGG富集分析从入门到精通

本文提供了一份详尽的R语言clusterProfiler实战指南,从环境配置、数据导入、基因ID转换到GO与KEGG富集分析及可视化,手把手教你解读生物学意义。文章重点介绍了如何利用clusterProfiler这一强大工具,将差异基因列表转化为清晰的生物学通路与功能故事,并分享了结果解读、可视化以及处理非模式生物等进阶技巧与避坑指南。

weixin_29044713的博客 162

Proteus仿真实战:用AT89C51+L298N搭建直流电机PID调速系统(附完整工程文件)

本文详细介绍了使用Proteus仿真平台结合AT89C51单片机和L298N驱动模块搭建直流电机PID闭环调速系统的全过程。从硬件选型、电路连接到PID算法实现与参数整定,提供了完整的开发指南和工程文件,帮助读者快速掌握闭环调速系统的设计与调试技巧。

weixin_28724661的博客 448

android 全局 handler,Android使用UncaughtExceptionHandler捕获全局异常

转载地址:http://orgcent.com/android-uncaughtexceptionhandler-exception/ |萝卜白菜的博客Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHa...

weixin_42541463的博客 239

GIS分析-利用K-Means方法进行地震分析

通过“聚类”可以获得有关我们所拥有的数据的各种线索,这是数据挖掘技术之一。分析创建的组有助于决策过程。在这项研究中,我们将使用数据挖掘工具之一的K-Means方法研究安纳托利亚东部地区近100年发生的地震的空间分布,并试图获得有用的信息,以供未来的研究使用。我从局地震目录页面获得了研究所需的地震数据,并从获得了区域边界数据。

gis收藏家的博客 1570

全局handler

全局Handler封装,优雅的书写handler的UI刷新界面 在Android开发中我们会经常使用handler进行ui界面的刷新,这主要是源于Android的线程机制和消息机制。Android不允许开发者在主线程中刷新ui界面,所以我们会经常用到消息机制,但是频繁的创建handler有可能导致内存泄漏,而且容易造成代码冗余,影响代码质量,所以我们要设置一个全局的handler,通过接口实现来实现ui刷新。 请看代码: import android.os.Handler; import andro

Android_data的博客 1554

SAP物料主数据中的销售视图。这是一个在销售与分销模块中至关重要的核心主数据,直接关系到从报价到交货的整个销售流程

SAP物料主数据的销售视图是销售流程的核心基础,它定义了物料如何被销售、定价、开票和交付。销售视图包含五个关键控制点:1)基本销售数据控制物料销售状态;2)销售组织数据决定销售渠道和产品分类;3)通用物料数据管理销售描述和税务分类;4)交货计划控制交付参数;5)开票计划管理定价规则。这些设置直接影响销售流程顺畅度、数据准确性、客户满意度、财务合规性和业务灵活性。建议将销售视图创建纳入新产品引入流程,并建立规范的维护机制,确保业务变化时及时更新配置。

金牌架构师 666

【图像超分】论文复现:新手入门必备!Pytorch实现SRGAN!手把手详细教程!代码注释详尽!可用于训练自己的数据集!实时验证模型性能!绘制PSNR曲线图!附训练好的各放大倍数的模型权重文件!

【图像超分】论文精读:SRResNet/SRGAN【图像超分】论文复现:万字长文!Pytorch实现SRResNet代码修改无报错!踩坑全记录!适合各种深度学习新手!帮助你少走弯路!附修改后的代码和PSNR最优的模型权重文件!请配合上述论文精读文章使用,效果更佳!与原论文描述不一样的实现部分,也即可以修改的部分数据集使用:论文中是ImageNet随机选35000张图像,本文是VOC2012数据集16700张图像。数据集预处理:裁剪大小不同,论文是96×96,本文是88×88。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 6853

Flutter实战:手把手教你封装一个优雅的全局权限管理工具类(基于permission_handler)

本文详细介绍了如何在Flutter中基于permission_handler封装一个高效的全局权限管理工具类。通过分层架构设计、状态集中管理和平台差异处理,实现权限逻辑与业务代码的解耦,提升应用的稳定性和用户体验。文章还涵盖了交互体验优化、测试策略及高级应用场景,为开发者提供了一套完整的权限管理解决方案。

weixin_30540691的博客 376

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Go最全Uniapp添加全局方法,二次封装缓存_uniapp this,没想到一个Handler还有中高级几种问法

全局方法的挂载现在main.js里面声明一个变量,值为一个函数。然后使用Vue.prototype.变量的形式将方法挂载上去,如下。这样setCache方法就被挂载在一个全局变量Cache上,在使用时直接调用就行了。声明全局变量时,一般会用符号开头。

2401_84920041的博客 350

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python日志输出-logging模块使用技巧

编写log_setting.py #!/usr/bin/env python # coding=utf-8 """ # :author: Terry Li # :url: https://blog.youkuaiyun.com/qq_42183962 # :copyright: © 2020 Terry Li # :motto: I believe that the God rewards the diligent. """ import logging class setLog: def __init__(.

梦马韶华 509

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 基类Base的封装

Android内部线程集中管理,不能直接new Handler new WebView? -- Base基类等封装- https://github.com/jenly1314/Base/tree/master/src/main/java/com/king/base Android 自定义Activity基类- http://blog.youkuaiyun.com/u013045971/article/d...

ShareUs的专栏 1487

okhttp封装

package com.sn.shopcat; import android.os.Handler; import android.os.Looper; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okht...

weixin_41722852的博客 154

Python 之logging

参考: 1.视频:https://www.youtube.com/watch?v=dvtjV4Xmtj0 2. https://cuiqingcai.com/6080.html 3.https://rgb-24bit.github.io/blog/2018/python-logging.html#org7bce4f7 1.简单用法,不能同时输出到屏幕加文件。 可以用logging.b...

weixin_30780649的博客 135

Springboot 全局异常捕获以及统一接口返回结果

public String toString() {return JSONObject.toJSONString(this);}}OK,到此关于返回码的东西以及大致完毕,我们现在开始写关于异常捕捉的。首先写一个异常类继承RuntimeException, BizException.java:/**@Author:JCccc@Description:@Date: created in 15:18 2019/5/3*/public class BizException extends RuntimeExcep

keyoukewude的博客 444

Android sdk开发(一)Application设计

Appllication的功能设计 每一个App都应该有一个扩展的Application。这个类中主要写一些整个app广泛用到的方法或app相关配置操作 application的生命周期是从app启动到退出。进程结束。所以在application中变量都定义为static,  也可以定义为非static。只是调用的时候稍微麻烦点   public classPhoebeApp extend

天下无双 2223

android刷新当前页面_加速页面只需一招:View?的异步?Inflate+?全局缓存

一、背景Android 在 View 的使用中,过多的布局文件 inflate 影响性能,尤其在一些滚动列表、样式种类很丰富的场景下,inflate 次数相对较多,整体 inflate 耗时就会增加,导致滚动过程卡顿。所以,需要 View 的异步 inflate,甚至 View 的全局缓存,通过这些方式,去减少 UI 线程 inflate 的耗时及次数,以便减少卡顿,提升性能。二、现有的解决方案要...

weixin_39946657的博客 442

android handler源码分析,Android源码解析Handler系列第(一)篇 --- Message全局池

转载请注明文章出处LooperJing!1、UI不能在子线程中更新是个伪命题我们常说UI需要在主线程中进行更新,子线程就不能更新UI吗?不是,我们并不是说不能在子线程中更新UI,而是说UI必须要在它的创建线程中进行更新,比如下面一段代码在子线程更新UI就不会报错。new Thread(new Runnable() {@Overridepublic void run() {TextView tex...

weixin_29479087的博客 204

Android Okhttp POST提交键值对

以前的项目网络连接那块一直坚持使用HttpClient,总是会出现一些莫名奇妙的问题,现在新的项目使用了OKHttp网络框架,发现超级好用,上网再了解下,发现OkHttp口碑真的不错,对比之下HttpClient简直就是弱爆啦,今天就OKHttp post方式提交键值对的使用提出来,一者为了总结所学的知识,然后也是为了日后项目的偷懒,OKHttp的官方介绍地址,还有OKHttp的github源码,...

weixin_30802171的博客 227

Flutter+开源鸿蒙实战|智联邻里Day9 系统权限适配+应用全局分享+缓存深度优化+版本更新弹窗

Flutter+开源鸿蒙实战Day9开发总结: 本文介绍了智联邻里项目Day9的开发内容,重点解决开源鸿蒙项目中的权限管理和应用分享两大痛点。通过集成permission_handler实现相机、相册、拨号等系统权限的统一管理,使用share_plus封装全局分享功能支持文字、链接等内容分享。同时优化了本地缓存策略,封装了版本更新弹窗组件,确保应用在鸿蒙多端设备上的良好体验。所有功能均采用第三方库实现,避免原生代码碎片化,保持代码规范统一。 关键点: permission_handler实现跨平台权限管理

xmdy5866的博客 382

android handler 封装,什么是Handler    Handler是Android消息机制的上层接口,它为我们封装了许多底层的细节,让我们能够很方便的使用底层的消息机制。Handle...

什么是HandlerHandler是Android消息机制的上层接口,它为我们封装了许多底层的细节,让我们能够很方便的使用底层的消息机制。Handler的最常见应用场景之一便是通过Handler在子线程中间接更新UI。Handler的作用主要有两个:一是发送消息;二是处理消息,它的运作需要底层Looper和MessageQueue的支撑。MessageQueue即消息队列,它的底层用单链表实现;L...

weixin_30726605的博客 296

【Web框架】2.Gin框架

为了能快速找到并组合完整的路由,GIN 在添加路由的同时,会在每个节点中添加 Priority 这个属性。Context 是通过中间件来传递的,在处理 HTTP 请求时,Gin 会依次执行注册的中间件,每个中间件可以对 Context 进行一些操作,然后通过Next() 将 Context 传递给下一个中间件。会将注册的中间件函数HandlerFunc 添加到路由组的函数链HandlersChain中,后续路由组下新注册的 handler 都会在前缀中拼上这部分公共的 handlers。

lixiaonan0318的博客 1350
上一篇: Android设计模式之Build设计模式
马小贱88
博客等级 码龄10年 1粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值