android service 学习(下)

eclipse android service 后台不断杀死某个进程的demo 项目中遇到一个不想在开机时启动的app,所以利用了android中的两个方法:mActivityManager.forceStopPackage(packageName); mActivityManager.killBackgroundProcesses(packageName); 来杀死后台进程的demo,分享给大家参考, 立即下载

通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递对象,你可以通过应用程序UI的方式写个运行在一个不同的进程中的service。在android平台中,一个进程通常不能访问其他进程中的内存区域。所以,他们需要把对象拆分成操作系统能理解的简单形式,以便伪装成对象跨越边界访问。编写这种伪装代码相当的枯燥乏味,好在android为我们提供了AIDL工具可以来做这件事。

 

AIDL(android接口描述语言)是一个IDL语言,它可以生成一段代码,可以使在一个android设备上运行的两个进程使用内部通信进程进行交互。如果你需要在一个进程中(例如:在一个Activity中)访问另一个进程中(例如:一个Service)某个对象的方法,你就可以使用AIDL来生成这样的代码来伪装传递各种参数。

 

要使用AIDL,Service需要以aidl文件的方式提供服务接口,AIDL工具将生成一个相应的java接口,并且在生成的服务接口中包含一个功能调用的stub服务桩类。Service的实现类需要去继承这个stub服务桩类。Service的onBind方法会返回实现类的对象,之后你就可以使用它了,参见下例:

 
先创建一个IMyRemoteService.aidl文件

 

 

1package org.allin.android.remote;
2interface IMusicControlService{
3        void play(); 
4        void stop(); 
5        void pause();
6}


 
如果你正在使用eclipse的Android插件,则它会根据这个aidl文件生成一个Java接口类。生成的接口类中会有一个内部类Stub类,你要做的事就是去继承该Stub类: 
 

01/**
02 * @author allin.dev
04 *
05 */
06public class RemoteMusicService extends Service {
07  
08    private static final String TAG = "RemoteMusicService";
09    private MediaPlayer mediaPlayer;
10  
11    /*
12     * (non-Javadoc)
13     * 
14     * @see android.app.Service#onBind(android.content.Intent)
15     */
16    @Override
17    public IBinder onBind(Intent intent) {
18        return binder;
19    }
20  
21    private final IMusicControlServic<SCRIPT type=text/javascript><!--mce:1--></SCRIPT>e.Stub binder = new IMusicControlService.Stub() {
22  
23        @Override
24        public void stop() throws RemoteException {
25            Log.d(TAG,"stop....");
26            if (mediaPlayer != null) {
27                mediaPlayer.stop();
28                try {
29                    // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数
30                    mediaPlayer.prepare();
31                } catch (IOException ex) {
32                    ex.printStackTrace();
33                }
34            }
35  
36        }
37  
38        @Override
39        public void play() throws RemoteException {
40            Log.d(TAG,"play....");
41            if (mediaPlayer == null) {
42                mediaPlayer = MediaPlayer.create(RemoteMusicService.this,
43                        R.raw.tmp);
44                mediaPlayer.setLooping(false);
45            }
46            if (!mediaPlayer.isPlaying()) {
47                mediaPlayer.start();
48            }
49        }
50  
51        @Override
52        public void pause() throws RemoteException {
53            Log.d(TAG,"pause....");
54              
55            if (mediaPlayer != null && mediaPlayer.isPlaying()) {
56                mediaPlayer.pause();
57            }           
58        }
59  
60    };
61      
62      
63    @Override
64    public void onDestroy() {
65        super.onDestroy();
66          
67        Log.d(TAG, "onDestroy");
68        if(mediaPlayer != null){
69            mediaPlayer.stop();
70            mediaPlayer.release();
71        }
72    }
73}

 
 
当客户端应用连接到这个Service时,onServiceConnected方法将被调用,客户端就可以获得IBinder对象。参看下面的客户端onServiceConnected方法:
 

01private ServiceConnection sc = new ServiceConnection() {
02          
03        @Override
04        public void onServiceDisconnected(ComponentName name) {
05            musicService = null;
06            Log.d(TAG, "in onServiceDisconnected");
07        }
08          
09        @Override
10        public void onServiceConnected(ComponentName name, IBinder service) {
11            musicService = IMusicControlService.Stub.asInterface(service);
12            Log.d(TAG, "in onServiceConnected");
13        }
14    };

 
 启动后的界面如下
 

 
 
[源码下载]

Service使用demo(Eclipse) Service与BroadcastReceiver的联合应用。 立即下载

相关推荐

Solidworks曲面建模学习(三)——样条曲线

本文主要演示平面的空间样条曲线的一些绘制。

东东不熬夜的博客 6504

android中service的使用方法-小例子讲解

1、RPC Service:(1)创建一个AIDL文件来向客户端定义接口AIDL 文件使用 java语法,它的扩展名是点 .aidl 使用的包名称与Android项目所使用的包相同package cn.gpb.service;interface IPerson{  void se

技术人宝哥 1137

HX720数据采集实战:从硬件连接到姿态解析(含避坑指南)

本文详细介绍了HX720高精度ADC芯片在数据采集与姿态解析项目中的实战应用。内容涵盖从硬件电路设计、驱动源码编写与优化,到原始数据处理、校准以及最终姿态角度计算的完整流程,并提供了关键的避坑指南和调试技巧,帮助开发者高效完成从传感器信号到可用姿态数据的转换。

i8j9k0l1的博客 488

eclipse android 服务端,使用Eclipse搭建简易Android服务器

现金流量表的编制公式一、 确定补充资料的“现金及现金等价物的净增加额” 二、确定主表的“筹资活动产生的现金流量净额”三、确定主表的“投资活动产生的现金流使用Eclipse搭建简易Android服务器分类:android一直都想做一些自己的app奈何多数功能都需要借助于服务器才能实现,本想用第三方平台,细想之下毕竟不是长久之计。这里自己搭建一个Android简易服务器这篇文章只是简单介绍下如何使用J...

weixin_39921504的博客 471

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南)

本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。

weixin_28698059的博客 474

银行会计第2课:交易和核算分离的思想

核算作为会计的基础,将交易转化为可量化的信息,而会计则通过整合核算结果,实现对经济活动的全面把控。- 本质:指企业或主体之间发生的、能引起经济利益变动的具体事项,比如采购商品、销售货物、支付工资等,是客观发生的经济事实。可售产品(业务视角的核算对象) + 属性条件(核算的分类,限制等) = 核算类型(会计视角,含有科目分类内容)- 核算:会计人员根据采购发票、入库单等,将这笔交易记为“借:原材料,贷:银行存款”(对事实的会计处理)。- 特点:是核算的源头,不涉及会计处理,仅代表经济行为的发生。

ademen的博客 499

学习笔记之简析安卓Android服务Service

文章目录前言什么是service?启动服务的两种方式直接启动绑定服务服务的生命周期服务与活动之间的通信使用服务的重点之一:多线程IntentService前台服务远程服务跨进程通信AIDL 前言 什么是service? 看代码,特点,注册 启动服务的两种方式 直接启动 绑定服务 服务的生命周期 服务与活动之间的通信 使用服务的重点之一:多线程 IntentService 前台服务 远程服务 跨进程...

一只修仙的猿 669

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3288

Android:安卓学习笔记之Service 的简单理解和使用

Service 的简单理解和使用Service1、简介1.1、背景1.2、什么是Service?2、生命周期2.1、常用函数2.2、生命周期方法具体介绍3、分类4、使用4.1、本地Service4.2、可通信的服务Service4.3、前台Service4.4、IntentService4.4.1、Service和IntentService对比4.4.2、使用4.4.3、源码分析5、总结6、面试问题参考 Service 1、简介 1.1、背景 你一般在什么情况下会使用Service? 经验总结: Ser

JMW1407的博客 6665

C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案)

首先官方有对这个错误给出解释和解决方案,连接如下: https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B 简单来说,貌似是线程问题,我猜。。。 之前我尝试着在代码中添加 Thread.Sleep(1000); 来进行解决,这种办...

Ck_Max的博客 5768

YOLO26 从零到工业落地全实战:自定义训练+多场景测试+边缘部署预备,踩坑实测100%可复现

很多人觉得训练是核心,其实不是——数据集的质量,直接决定了你模型的上限。我见过太多人,标注不规范、格式错误、数据集划分混乱,然后疯狂调参,训了几百轮还是不收敛,纯属白费功夫。我这次用的是工业零件缺陷检测自定义数据集,共3个类别:划痕、毛刺、变形,总计1200张图片,给大家讲一套标准的、可复现的数据集制作流程,不管你是做工业检测、安防、交通,都能直接套用。很多人拿到数据集,直接用默认命令训练,然后抱怨精度上不去。默认参数是给COCO数据集用的,你的自定义数据集,必须针对性调参,不然根本达不到最优效果。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 573

安卓基础概念学习--Android Service服务

基础概念 服务是一种在后台运行而无需与用户直接交互的组件。 由于服务没有用户界面,因此它不受Activity的生命周期的约束。 所以,服务用于重复且可能长期运行的操作。 服务有以下两种类型 状态 描述 started Android的应用程序组件,如活动,通过startService()启动了服务,则服务是Started状态。一旦启动,服务可以在后台无限期运行,即使启动它的组件已经被销毁。 bound 当Android的应用程序组件通过bindService()绑定了服务,则服务是Bou

RaynorFTD的博客 404

YOLO26改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力YOLO26精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 194

android的学习之Service的学习

android的Service的学习:----------------------------------------------------- 1、Activity 2、Service 3、广播 4、内容提供者 一、Service的介绍:    1、 Service与线程一点关系都没有,它不是线程。    2、它主要用来执行一些耗时的操作。在后台执行。    3、Se

fjx11223344的博客 409

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

安卓学习日记——Service

Service的基本概念 Service是Android系统中的四大组件之一,它跟Activity的级别差不多,但不能自己运行,只能后台运行,并且可以和其他组件进行交互。service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity,这个时候程序就要在后台继续播放,比如检测SD卡上文件的变化,再或者后台记录你地理信息位置的改变等等,总之服务总是藏在后台的。 S...

chen_xiaoke的博客 239

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

安卓之service学习总结

Service启动流程 context.startService()  -> onCreate()  -> onStart()  -> Service running  -> context.stopService()  -> onDestroy()  -> Service stop  如果Service还没有运行,则android先调用onCreate(),然后调用onS

TO TOP CODER 1043

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android service 构造函数,Android学习笔记五之Service

原标题: Android学习笔记五之Service1、什么是Service?什么是Service?Service是系统的四大组件之一,官方文档是这样描述Service的:A Service is an application component that can perform long-running operations in the background and does not provi...

weixin_30609645的博客 748

Android四大组件基础学习之Service

通过一个基础案例来学习Android四大组件,一共分为4章,陆续更新中,如果有做的不好的地方、文章上的错误,或者是建议,欢迎大家在评论区或者私信我,感谢大家的包容和理解!

Y3036359510的博客 1337

Android Studio学习Service遇到的难点

为了能够使Activity中ServiceConnection中的方法能顺利得到Service对象(这里写的所有的Service对象都是同一个Service对象,因此不能在Activity中重新new一个),需要在Service中写一个内部类,继承Binder类,并新增一个方法,这个方法是供Activity中提到的IBinder获得Service对象的关键。使用的关键就是在Activity中使用startService()来启动服务,stopService()来暂停服务。

qq_46203188的博客 300

android学习总结——service

service介绍 service是Android四大组件之一,是一个可以在后台执行长时间运行操作而不使用用户界面的组件.。服务可由其他应用组件启动(如activity),服务一旦被启动,将一直在后台运行,即使启动服务的组件(activity)已销毁,也不受影响。此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O ...

wxf540886047的专栏 383

Android 中 Service 学习,总结

前文:Android 中 Service 学习--与组件的通讯5法           Android 中 Service 学习,开篇        以上两篇文章分别介绍了与Service的五种交互方式,本文主要作为一个补充和总结。        1. 服务类型比较 表1.1         2. 五种交互方式比较 表2.1         通

dxyoo7的专栏 606

Android Service 学习资料

关于Android service, 网上有很多不错的帖子解析,搜集汇总一下, 方便时不时看看学习。 Google Android Guide:https://developer.android.com/guide/components/services Google Android Reference:https://developer.android.com/reference/android/app/Service Android Service的使用介绍:https://www.jianshu

你好呀,信田君! 197

Android Service学习之本地服务

Android Service学习之本地服务

编程路上的野花 696

安卓开发之Service进阶学习

与Activity一样,Service也有自己的生命周期: 由上图可以看到service有两种启动方式,分别为startService与bindService两种方式,

iris的博客 660

android Service的学习

1.以前刚接触Service的时候,很不理解。但是用过俩三次就慢慢理解了,可是理解是理解了,但是记得不清楚,长时间不用就忘记了,所以我总结下Service的用法,加强自己的印象。 2.Service作为android 四大组件之一,用到的地方还是比较多的,Service没有界面,类似于电脑中的后台。Service的启动方式有俩种:bindService 和StartService俩种方法

qq_25984015的博客 452
上一篇: android service 学习
下一篇: AsyncQueryHandler -->同步更新
bigapple88
博客等级 码龄18年 134粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值