Handler 01

消息队列和 Looper以及源码分析 1,消息队列和Looper的工作机制 Looper 的作用就是循环遍历消息队列,如果有新消息,就把新消息交给它的目标处理。每当我们用 Handler 来发送消息,消息就会被放入消息队列中,然后 Looper 就会取出消息发送给它的目标 target。一般情况,一个消息的 target 是发送这个消息的 Handler,这么一来,Looper 就会把消息交给Handler 处理,这个时候 Handler 的 dispatchMessage 方法就会被调用,一般情况最终会调用Handler 的 handleMe 阅读详情

Handler:发送消息、处理消息对象

looper :轮训器 ,每个线程只能有一个Looper,决定了handler发送消息到哪个线程。new handler(Looper looper)

message:消息对象

messagequeen:消息队列

handler 创建:

//自定义 线程 +赋值给 handler
Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        Thread thread = Thread.currentThread();
        Looper.prepare();
        looper = Looper.myLooper();
        Looper.loop();//todo 写在Looper.loop()之后的代码不会被执行,这个函数内部是一个循环
    }
});
t.start();
mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
        customThreadhandler= new Handler(looper){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                threadMethod();
            }
        };
    }
},100);

HandlerThread

本质:handler + Thread

mHandlerThread = new HandlerThread("upLoadRecordServiceHandlerThread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper()){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        threadMethod();
    }
};

模拟handler 开线程下载:参考:https://blog.youkuaiyun.com/u011240877/article/details/72905631

/**
 * Description:
 * <br> 继承 HandlerThread 模拟下载线程
 *
 */

public class DownloadThread extends HandlerThread implements Handler.Callback {

    private final String TAG = this.getClass().getSimpleName();
    private final String KEY_URL = "url";
    public static final int TYPE_START = 1;
    public static final int TYPE_FINISHED = 2;

    private Handler mWorkerHandler;
    private Handler mUIHandler;
    private List<String> mDownloadUrlList;

    public DownloadThread(final String name) {
        super(name);
    }

    @Override
    protected void onLooperPrepared() {    //执行初始化任务
        super.onLooperPrepared();
        mWorkerHandler = new Handler(getLooper(), this);    //使用子线程中的 Looper
        if (mUIHandler == null) {
            throw new IllegalArgumentException("Not set UIHandler!");
        }

        //将接收到的任务消息挨个添加到消息队列中
        for (String url : mDownloadUrlList) {
            Message message = mWorkerHandler.obtainMessage();
            Bundle bundle = new Bundle();
            bundle.putString(KEY_URL, url);
            message.setData(bundle);
            mWorkerHandler.sendMessage(message);
        }
    }

    public void setDownloadUrls(String... urls) {
        mDownloadUrlList = Arrays.asList(urls);
    }

    public Handler getUIHandler() {
        return mUIHandler;
    }

    //注入主线程 Handler
    public DownloadThread setUIHandler(final Handler UIHandler) {
        mUIHandler = UIHandler;
        return this;
    }

    /**
     * 子线程中执行任务,完成后发送消息到主线程
     *
     * @param msg
     * @return
     */
    @Override
    public boolean handleMessage(final Message msg) {
        if (msg == null || msg.getData() == null) {
            return false;
        }

        String url = (String) msg.getData().get(KEY_URL);


        //下载开始,通知主线程
        Message startMsg = mUIHandler.obtainMessage(TYPE_START, "\n 开始下载 @" + DateUtils.getCurrentTime() + "\n" + url);
        mUIHandler.sendMessage(startMsg);

        SystemClock.sleep(2000);    //模拟下载

        //下载完成,通知主线程
        Message finishMsg = mUIHandler.obtainMessage(TYPE_FINISHED, "\n 下载完成 @" + DateUtils.getCurrentTime() + "\n" + url);
        mUIHandler.sendMessage(finishMsg);

        return true;
    }

    @Override
    public boolean quitSafely() {
        mUIHandler = null;
        return super.quitSafely();
    }
}
 

 

 

 

 

yakit 通过codec 解决RSA加密 靶场就不过多叙述,具体的可以看yakit系列的前几篇文章。yakit 热加载进行 RSA 加密如何显示想要的payloads。 阅读详情

相关推荐

Nacos 2.3.2实战:5分钟搞定达梦数据库插件配置(含避坑指南)

本文详细介绍了在Nacos 2.3.2中配置达梦数据库数据源插件的完整实战流程。通过解析SPI插件机制,提供从环境准备、插件编译部署到核心配置的逐步指南,并重点分享了驱动加载、SQL兼容性等高频问题的避坑解决方案,助力开发者高效完成国产化数据库适配。

weixin_29200485的博客 499

Android之HandlerThread源码分析(第五篇:Looper对象的创建与获取,学习如何保证Looper对象创建完毕)

前言 在工作线程中创建某个对象,担心对象没有创建完成,就被其它线程访问?ThreadHandler诠释了如何使用工作线程优雅的创建对象,让我们从获取Looper对象的方法开始 获取Looper对象 public Looper getLooper() { if (!isAlive()) { return null; } // If the thread has been started, wait u

王员外的博客 3880

导带、价带

价带是电子的“束缚态”能量区间,决定材料的化学性质;导带是电子的“自由态”能量区间,直接决定材料的导电能力;禁带宽度则是区分金属、半导体与绝缘体的核心参数。通过调控能带结构(如掺杂、应变工程),可设计出具有特定电学和光学特性的功能材料,推动电子信息、能源转换等领域的技术革新。

weixin_51552564的博客 5116

Looper和Handler

1.处理消息过程 1.1 从HandlerThread开始 官方解释:带有一个Looper的Thread,然后这个Looper可以被使用去创建Handler. 既然是一个Thread,那我就从run()开始!!进入Looper中. 1.1.1 Looper.prepare(); 为当前线程初始化一个Looper对象,在调用Looper.loop()之前必须先调用该方法,结束时调用Looper.quit() 其中sThreadLocal是Looper中的一个静态常量.ThreadLocal用来存储线程的自

二叉树 487

b站up“麦辣翅翅”《YOLOv8修改损失函数》问题解决RuntimeError: The size of tensor a (4) must match the size of tensor

b站up“麦辣翅翅”《YOLOv8修改损失函数》问题解决RuntimeError: The size of tensor a (4) must match the size of tensor ;TypeError: bbox_iou() got an unexpected keyword argument 'xywh‘

weixin_68331871的博客 3020

算法面经手撕系列(2)--手撕BatchNormlization

手动实现/手撕BatchNormlization

罟霖同学的站点 865

Android - Handler

当MessageQueue没有需要被执行的MessageQueue时就会遍历回调所有的IdleHandler。所以IdleHandler主要用于在消息队列空闲的时候处理一些轻量级的工作。

HugMua的博客 1038

【算法】克里金kriging参数值预测模型

模型中特征值2个,目标值1个,data数据集如图所示。搭建kriging参数值预测模型。

weixin_48618536的博客 5059

一个例子了解 HandlerThread,Looper,ThreadLocal,Handler,MessageQueue,Message的关系

该方法中MessageQueue对象 mQueue 就是从2.1 Hander中Lopper中获取的,而且这个MessageQueue 在1.3 消息循环中不停的被遍历,这里面涉及到HandlerThread,Looper,ThreadLocal,Handler,MessageQueue,Message 等概念,.myLooper()方法从 sThreadLocal 中获取Looper实例(这个实例是线程独立的,即获取的是对应线程创建的Looper实例)本身继承Thread,该方法启动线程,

kk3087961的博客 522

AUTOSAR进阶图解==>AUTOSAR_SWS_BSWGeneral

本文详细解析AUTOSAR基础软件(BSW)模块的通用规范,涵盖其分层架构、配置管理、初始化流程和状态转换机制。AUTOSAR采用清晰的分层设计,包括应用层、服务层、ECU抽象层和微控制器抽象层,各层模块通过标准化接口交互。BSW模块配置采用类型化定义,支持预初始化、初始化和后期构建配置。文档还阐述了模块初始化流程中的依赖管理,以及运行时的状态转换与错误处理机制,为汽车电子控制单元的标准化开发提供规范指导。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1126

选课系统进不去?我用 Python 做了个“捡漏挂机”脚本,全自动监控空余名额

频率控制:脚本请求频率不要太高(建议间隔 3-5 秒以上),否则可能被教务系统封 IP,甚至会被教务处请喝茶。仅供学习:本文旨在通过选课场景教学requests和网络抓包原理,请勿用于非法用途或破坏公平性。刷新页面 -> 等待加载 -> 用眼睛看人数 -> 没满?-> 点击选课 -> 确认这个流程最大的瓶颈在于**“等待加载”和“人的反应时间”**。网页加载需要渲染 HTML、CSS、图片,而 Python 脚本只需要请求一个微小的 JSON 数据接口,速度是浏览器的10 倍以上。fill:#333;

BUG猿的博客 292

android随笔01——handler

handler : 当需要在子线程更新UI的时候,可以用handler来完成; 步骤: 1.在主线程中新建一个handler对象:      (以软件联网检查更新的部分代码来演示) private String desc;  private String updateurl; private final int GO_HOME = 100;  privat

naiheshushu的博客 332

[关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱

本文主要讲解Gephi绘制作者间的关系图谱,该软件可以广泛应用于社交网络、知识图谱分析,推荐读者使用。这是非常基础的一篇文章,重点讲解Gephi使用方法,希望对大家有所帮助。

杨秀璋的专栏 1万+

01、Handler的那些事

版权声明:本文为博主原创文章,未经博主允许不得转载。 PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/73e5fd7eb… 本文出自 TigerChain 简书 Android 系列 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过 2、教程难度 初级 正文 摘要: Handler 在 Android 的作用主要是...

weixin_33816611的博客 143

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

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

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android-Handler01

1.Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 2.Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper(从Message Queue取出)所送来的消息。 3. Message Queue(消息队列):用来存放线程放入的消息...

acwv83239的博客 127

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java android handler_Android中的Handler01

//首先在XML文件中配置一下android:id="@+id/textViewId"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="数据"/>android:id="@+id/butid"android:layout_width="match_parent"androi...

weixin_39936403的博客 84

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android中的Handler01

//首先在XML文件中配置一下 <TextView android:id="@+id/textViewId" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="数据" /> <...

weixin_33965305的博客 72

Go Web Chapter01-Handler

若有疑惑,可查看Go源码实现。

m0_64304174的博客 126

Android Handler消息机制01-Message源码学习

1. 背景 背景是在实际开发中,有一个Message消息在主线程接收到了后,将Message切换到子 线程去处理,但是出现了Message.obj被串改或者被置空,导致出现NullPointException或者ClassCastException,此时正好从源码分析下出现的原因和优化方法。 2. Message几个关键点 2.1 recycle什么时候会被调用 recycle被调用也即意味着这个消息对象会清空,并重新加入到消息池中等待调用。这就意味着某个Message对象在回收之后再使用此消息会出现空指针

Android 小萌新的博客 2139

Android——学习之 Handler_01简单的理解使用

Handler知识点1、使用handler 更新UI的原因2、Handler的工作原理3、Handler常用使用方式 笨比最近搬砖 ,频繁的看到Handler使用。之前只是知道Handler是可以更新UI页面的,但是具体的流程以及其他的使方式笨比一点也不清楚,从网上参考了一些资料,记录下学习记录,加深记忆 1、使用handler 更新UI的原因 例如,页面有一个按钮或者文本框,如果按钮的响应或者获取文本框的时候 有其他耗时任务,会造成页面假死状态。在Android中,主线程是非线程安全的,也就是说UI的更新

y7s14x的博客 146

jbpm中各种handler如何使用spring里面的bean方法01

jbpm中各种handler如何使用spring里面的bean? 如果处理简单的流程,task,里面的class 直接使用我们自己定义的handler就可以了(当然要实现AssignmentHandler),就算是要要添加角色名称直接使用&lt;roleName&gt;xxxxx&lt;/roleName&gt;就ok了.(不用自己添加set方法去给roleName赋值,jbpm回自己赋值的...

Happy learning 210

一定搞懂Handler消息处理机制系列之「01.Handler消息发送」

一定搞懂Handler消息处理机制系列之「Handler消息发送」Handler消息发送的方式有两种: Postpublic final boolean post(Runnable r){ return sendMessageDelayed(getPostMessage(r), 0); } /** @param delayMillis 这个参数表示延迟多少毫秒之后触发回调接口 */ pu

m0_37184608的博客 503

Fragment用handler向Activity发送消息并调用Activity的Handler.Callback

Fragment01中布局一个按钮。点击改按钮向Activity发送消息:隐藏Fragment01,显示Fragment02. public class MainActivity extends AppCompatActivity implements Handler.Callback{ @Override protected void onCreate(Bundle s

d_gqiang的博客 1113

2021-08-18 消息传递机制(Handler) 01

Handler 自我理解笔记 以下内容原文链接:https://blog.youkuaiyun.com/luoyingxing/article/details/86500542 Handler的通俗理解: 首先,我将Handler相关的原理机制形象的描述为以下情景: Handler:快递员(属于某个快递公司的职员) Message:包裹(可以放置很多东西的箱子) MessageQueue:快递分拣中心(分拣快递的传送带) Looper:快递公司(具有处理包裹去向的管理中心) 情景分析:在子线程中更新主线程的UI

Chen_Yumin的博客 241

20151129-01 Android 中Message,MessageQueue,Looper,Handler详解+实例

转载自  http://blog.youkuaiyun.com/yhb5566/article/details/7342786 一、几个关键概念  1、MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。  创建一个线程的时候,并不会自动创建其MessageQueue。通常使用一个Looper

zebratoo的专栏 386

2022-01-11 startActivity 到另外一个actvity需要用removeCallbacksAndMessages停止handler

一、startActivity 到另外一个actvity,如果不停止handler的话会一直运行。 一、需要在onDestroy或者onStop里面使用removeCallbacksAndMessages函数remove掉。

海月汐辰 313
上一篇: git 01 branch
下一篇: android 目录与手机目录
阿杰、
博客等级 码龄11年 13粉丝 47原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值