IntentService详解

自定义Android聊天气泡ChatView。仿微信聊天气泡,能自定义边框,颜色,点击特效。 原博客地址:https://blog.youkuaiyun.com/weixin_40400031/article/details/90755036 引言:最近公司准备做一款即时通讯的APP,就照着微信的功能模块做。于是我在网上找了很多聊天气泡BubbleView,要不就是样式太丑,要不就是对交互点击不太友好。所以小编就下定决心,自己画一个满足要求的自定义ChatView。由于即时通讯中有语音功能,所... 阅读详情

Running in a Background Service

Service相信都很熟悉,Android四大组件之一,后台运行。但这里的后台运行并不是指Service在子线程中运行,而是指Service的运行是不依赖于UI的。Service是在主线程中运行的。
这里写图片描述


没关系,Google还提供了另外一个IntentService实现后台子线程运行。关于IntentService有几点需要注意的:

  • IntentService不能直接跟UI进行交互,必须将结果发送到UI中;
  • 请求是按顺序执行的,重复发送请求需要等待之前的执行完毕;
  • IntentService中的操作不能被打断。

虽然IntentService局限较多,然而,在大多数情况下,IntentService是执行简单后台操作的首选方法。比如更新Apk,比如一些网络请求等等


创建一个IntentService

public class MyService extends IntentService{

    public MyService() {
        super("MyService");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {

       String dataString = intent.getDataString();

       Log.e(TAG,"dataString :" + dataString);

        //todo耗时操作
}

这里跟Service的创建还是有区别的,IntentService自动处理了onStartCommand() 之类的回调方法,在IntentService中要避免实现Service中的回调方法。
在AndroidMainfest.xml中注册Service

<service 
    android:name=".service.MyService"
    android:exported="false"/>

开启一个IntentService

public void clickMy(View view){
        Intent mServiceIntent = new Intent(this,MyService.class);
        mServiceIntent.setData(Uri.parse(dataUrl));
        startService(mServiceIntent);
    }

通过创建一个Intent,实现发送IntentService,同时可以携带各类参数。


IntentService同UI交互

IntentService在处理完耗时操作以后,如何跟Fragment或者Activity进行交互呢? 通过发送本地广播,IntentService可以将结果发送出去,在想要处理结果的Fragment或者Activity中注册本地广播,就可以实现IntentService和UI的交互。下面代码贴出完整的IntentService类,以及Activity中监听IntentService返回结果的处理。

IntentService

public class MyService extends IntentService{

    private static final String TAG = "MyService";

    private BroadcastNotifier mBroadcaster = new     
    BroadcastNotifier(this);

    public MyService() {
        super("MyService");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {

       String dataString = intent.getDataString();
       Log.e(TAG,"dataString :" + dataString);        
                   mBroadcaster.broadcastIntentWithState(Constants.STATE_ACTION_STARTED);
        //模拟耗时操作,更多时候是网络请求
        try {
            mBroadcaster.broadcastIntentWithState(Constants.STATE_ACTION_DOING);
            Thread.sleep(5 * Integer.valueOf(dataString));
                mBroadcaster.broadcastIntentWithState(Constants.STATE_ACTION_FINSHIED);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

这里通过BroadcastNotifier管理不同状态广播的发送

public class BroadcastNotifier {

    private LocalBroadcastManager mBroadcaster;

    public BroadcastNotifier(Context context){
        mBroadcaster = LocalBroadcastManager.getInstance(context);
    }

    public void broadcastIntentWithState(int status){

        // The Intent contains the custom broadcast action for this app
        Intent localIntent = new Intent();
        localIntent.setAction(Constants.BROADCAST_ACTION);

        //将statue放入intent中
        localIntent.putExtra(Constants.EXTENDED_DATA_STATUS,status);
        localIntent.addCategory(Intent.CATEGORY_DEFAULT);

        //发送广播
        mBroadcaster.sendBroadcast(localIntent);
    }

}

通过LocalBroadcastManager发送一个本地广播,本地广播也就是只有当前应用能够监听的广播事件。

接下来看Activity中处理广播事件

public class MainActivity extends AppCompatActivity {

    private String dataUrl = "1000";

    private static final String TAG = "MainActivity";

    private DownloadStateReceiver mDownloadStateReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        IntentFilter statusIntentFilter = new IntentFilter(
                Constants.BROADCAST_ACTION);
        statusIntentFilter.addCategory(Intent.CATEGORY_DEFAULT);
        mDownloadStateReceiver = new DownloadStateReceiver();
        LocalBroadcastManager.getInstance(this).registerReceiver(mDownloadStateReceiver,statusIntentFilter);
    }

    public void clickMy(View view){
        Intent mServiceIntent = new Intent(this,MyService.class);
        mServiceIntent.setData(Uri.parse(dataUrl));
        startService(mServiceIntent);
    }

    @Override
    protected void onDestroy() {

        if(mDownloadStateReceiver != null)
            LocalBroadcastManager.getInstance(this).unregisterReceiver(mDownloadStateReceiver);

        super.onDestroy();
    }

    private class DownloadStateReceiver extends BroadcastReceiver{

        public DownloadStateReceiver() {
        }

        @Override
        public void onReceive(Context context, Intent intent) {

            switch (intent.getIntExtra(Constants.EXTENDED_DATA_STATUS,Constants.STATE_ACTION_STARTED)){
                case Constants.STATE_ACTION_STARTED:
                    Log.e(TAG,"开始执行耗时任务");
                    break;
                case Constants.STATE_ACTION_DOING:
                    Log.e(TAG,"正在执行耗时任务");
                    break;
                case Constants.STATE_ACTION_FINSHIED:
                    Log.e(TAG,"完成耗时任务");
                    break;
            }
        }
    }
}

很简单,通过注册对应Action的广播,就可以监听IntentService中不同状态下发出的广播信息,在监听到状态后,进行了简单的日志打印.

08-30 14:35:50.148 26467-26467/? E/MainActivity: 开始执行耗时任务
08-30 14:35:50.148 26467-26467/? E/MainActivity: 正在执行耗时任务
08-30 14:35:55.149 26467-26467/? E/MainActivity: 完成耗时任务

其中Constants用来存储一些广播的Action名称以及一些不同的Statue

public class Constants {

    public static final String BROADCAST_ACTION = "com.intentservice.service.BROADCAST";

    public static final String EXTENDED_DATA_STATUS = "com.intentservice.service.STATUS";

    public static final int STATE_ACTION_STARTED = 0;

    public static final int STATE_ACTION_DOING = 1;

    public static final int STATE_ACTION_FINSHIED = 2;
}

至此,IntentService相信已经掌握的差不多了。

记得之前参加过一个面试,面试官有问道是否了解IntentService,之前从来没有接触过这个类,因此无奈的回答了不了解。然后面试官又问我,那你们更新apk之类的后台服务是如何实现的,我的回答是通过在Service中开启子线程来实现异步方法处理,然后通过handler实现结果回调。

有毛病吗?没毛病。有毛病吗?当然有毛病啊。既然Google提供了IntentService,为何我还要多此一举呢。IntentService不仅实现了Service在子线程中执行,也完全跟UI脱离了关系,你可以再任何页面通过监听广播实现IntentService结果的监听。而且,你真的能保证自己实现的Service异步操作能比得过Google吗?

因此,强烈建议大家理解并真正使用IntentService。

国赛数学建模高教社杯历届优秀论文全集 包含了2004到2023年高教社的赛题及优秀论文。 阅读详情

相关推荐

autoDL算力云装Xinference[坑与步骤]

在页面直接点击下载会出现下着下载进度条消失,试了几次才出现这个报错,现在我们就继续安装缺少的包吧。这一步成功绕开了系统盘空间限制。先租用一个合适的服务器,建议不要选最新版本,跟我选的一样即可,不然后面会出现。最近在 AutoDL 上尝试部署。🚫 不要直接使用以下命令。点击下面链接即可打开。

ngadminq的博客 2382

Android Service和IntentService(启动方式startService和bindService)

Service Android四大组件之一,Service 是长期运行在后台的应用程序组件。 Service 不是进程,也不是线程,它和应用程序在同一个进程中 Service中不能做耗时操作,他是寄托于主线程的。运行在主线程中 service的生命周期,两种情况 IntentService(推荐使用) IntentService 是继承于 Service 并处理异步请求的一个类,在 I...

张雨的博客 7538

STM32+W5500实战:5分钟搞定FreeModbus TCP移植(附完整代码)

本文详细介绍了如何在STM32微控制器上,结合W5500以太网芯片,快速完成FreeModbus TCP协议栈的移植,构建稳定可靠的工业级Modbus TCP服务器。内容涵盖硬件连接、软件架构、驱动适配、核心移植代码实现及调试优化技巧,旨在提供可直接应用于实际项目的完整解决方案。

life6的博客 878

Android线程交互之IntentService

一、简介 IntentService是一种特殊的Service,它可以进行一些后台的耗时操作,在任务执行结束后会自动停止。由于它是一种服务,所以它的优先级要高于普通的线程,不容易被系统杀死。 内部封装了HandlerThread 和 Handler 二,使用 1、创建IntentService的子类,实现onHandleIntent(@Nullable Intent intent)方法和构造方法 ...

u013087553的博客 355

Win10 Rational Rose 安装教程

在此教程中我们需要四个文件,点此下载[提取码:ig33] 其中第一个为2007的安装包,第二个为破解文件 前言 很多小伙伴反应说会出现几天后就到期的问题,包括我也出现了该问题,如果你已在其他地方安装好了文件且破解成功,且但几天后到期,如果可以使用更改时间的方式打开,那么可以跳过接下来的教程,直接看第三节,我们采用批处理的形式一键完成从修改时间到打开最后改回来的方法解决此问题 一、安装软件 解压缩两个安装包,进入 Rational Rose文件夹 选择setup.exe开始安装 按照图示依次点击

CoderJiang 2万+

SPSS实战:如何用Harman单因素检验搞定共同方法偏差(附完整操作步骤)

本文提供了一份详尽的SPSS实战指南,手把手教你运用Harman单因素检验来诊断共同方法偏差。文章从核心概念讲起,逐步详解数据准备、SPSS操作步骤、结果解读与报告撰写,帮助研究者快速掌握这一关键的数据质量控制方法,确保量化研究结论的可靠性。

weixin_29263201的博客 1693

Android——IntentService

IntentSevice为在单一后台线程中执行任务提供了一种直接的实现方式。它可以处理一个耗时的并确保不会影响到UI的响应性。另外IntentService的执行还不受UI生命周期的影响,以确保AsyncTask能够顺利运行。 但是IntentService有以下局限性: 不可以直接和UI做交互,为了他能把执行的结果体现在UI上,需要把结果返回给Activity工作任务队列是顺序执

ZhiChu_2025的博客 416

硬件基础(4):(6)高精度ADC设计中模拟地与数字地的划分与连接

在实际 PCB 设计中,**接地与布线**对于获得干净的参考电压和高精度 ADC 测量至关重要。下面详细阐述**如何在硬件层面减少数字噪声耦合到模拟电路、保障参考电压的稳定性**。

FCZlll的博客 2642

IntentService 原理详解

1 简单介绍 IntentService是一个继承自Service的抽象类,是一种特殊的Service。所以两者的基本配置和启动方式都是一样的,区别是IntentService创建了自己的特有方法onHandleIntent(),可以用来处理异步请求,实现多线程,因此用来执行后台耗时操作任务,而每一个耗时操作都会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个。 2 使用方式步骤 ① 定义IntentServi

ysh_123 1045

3.4 ISIS和OSPF之间路由引入

通过以上输出可以看到OSPF的路由引入到了IS-IS中。通过以上输出可以看到ISIS的路由没有传递给OSPF。通过以上输出可以看到OSPF的路由没有传递给ISIS。通过以上输出可以看到ISIS的路由被引入进了OSPF。掌握在IS-IS中引入OSPF路由的方法。掌握在OSPF中引入IS-IS路由的方法。图3-3:ISIS和OSPF之间路由引入。在R3上把ISIS的路由引入到OSPF。OSPF引入外部路由的缺省度量值为1。在R3上把OSPF的路由引入到ISIS。引入的外部路由类型为Type2。

lwljh134的博客 1802

万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)!

见到汇编就害怕?读完这篇,扫除汇编拦路虎!!(示例丰富,可做手册,随手查阅!)

车载系统攻城狮 1万+

Android IntentService详解

转载请注明出处:http://blog.youkuaiyun.com/vnanyesheshou/article/details/75073307 最近加深基础,看到个IntentService类,以前从来没有遇见过,更不知其用来干嘛的,所以就整理了一个demo,看看这个怎么使用。 1 简介 IntentService概括 IntentService is a base class for Se

奋斗的菜鸟ing 1万+

海德汉机床采集数据

海德汉数控系统我一般在高端机床上见得比较多。有好多五轴加工精度比较高的机床都用的是海德汉的系统。市面上常见的有530和640等型号。海德汉的采集还是有点难度的,需要对SDK有深度的了解。

若云流风的专栏 1525

android intentservice 实例,Android IntentService详解及使用实例

android intentservice详解一、intentservice简介intentservice是service的子类,比普通的service增加了额外的功能。先看service本身存在两个问题:service不会专门启动一条单独的进程,service与它所在应用位于同一个进程中;service也不是专门一条新线程,因此不应该在service中直接处理耗时的任务;二、intentserv...

weixin_42279592的博客 331

深度学习工具包 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")

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IntentService 面试详解

前两篇文章介绍了AsyncTask与HandleThread,主要是针对Android的多线程编程。在这里补充下线程的知识。 线程是操作系统调度的最小单元,同时也是一种受限的资源(即不能无限制的创建和销毁,创建和销毁都会占用系统资源)。操作系统是通过时间片轮转的方式调度每个线程,因此不可能做到绝对的并行。 进程一般指一个执行单元,在PC或移动设备上指一个程序或者应用。一个进程可以包含一个或多个...

CoderZJ的博客 473

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

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

Android 服务之IntentService 详解

1. IntentService 概述 2.IntentService如何使用 3. IntentService源码解析 1. IntentService 概述 IntentService继承自Service,所以,我们可以用来执行后台耗时任务。那为什么又要封装一个这样的IntentService呢?下面我们来看看IntentService有什么特点。 它本质是一种特殊的S...

Simon_Crystin的博客 1206

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

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

Android开发——HandlerThread以及IntentService详解

IntentService是一种特殊的Service,它继承了Service,因此它自然会比单纯的线程优先级要高,然后它自己依旧是一个抽象类,需要创建自己的子类。IntentService可用于执行后台耗时任务,执行完毕后会自动停止。这是它最大的特点。 IntentService内部封装了HandlerThread和Handler,因此仍然需要先从HandlerThread讲起。...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

Android 多线程之IntentService 完全详解

转载请注明出处(万分感谢!): http://blog.youkuaiyun.com/javazejian/article/details/52334098 出自【zejian的博客】 关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 IntentService 一、IntentService概述

zejian的博客 4万+

Android[学习] IntentService详解

IntentService是Service的子类,用来处理异步请求。一、使用介绍通过Context.startService(Intent)启动可以处理异步请求的Service,使用时,你只需要继承IntentService和重写onHandleIntent(Intent)方法接收一个Intent对象。不会阻塞主线程,一次执行一个操作。特点: IntentService自带一个工作线程 将需要实际的

风的方向 1408
上一篇: Android 自动更新Apk组件封装
下一篇: Android 拍照功能详解
mo_android
博客等级 码龄9年 12粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值