- 浏览: 559422 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是11.38,你算出来36.43,要求N个点 ...
平均距离 -
xiao_android_jun:
[color=red][ size=xx-small ...
Android 之 进程的概念介绍 -
明子健:
小伙子,很有前途哦
《将博客搬至CSDN》 -
1140566087:
dugujiujian 写道R.layout.simple_s ...
Android 之 下拉(Spinner) 组件示例 -
dugujiujian:
R.layout.simple_spinner_dropdow ...
Android 之 下拉(Spinner) 组件示例
使用Service 进行后台服务
1、Service 简介:
Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可
视化界面,运行与后台的一种服务程序;
What is Service?
Service就是系统中的服务:
特点:
* 无法与用户直接进行交互;
* 必须由用户或者其他程序显示的来启动,优先级比较高;
* 比处于前台的应用优先级低,但是比后台的其他应用程序优先级高;
When?
当需要某些程序在后台运行的时候就使用Service;当Activity的生命周期结束的时候,
Service还是存在的;
2、Service的分类:本地service 和 远程service;
本地service:就是和当前的应用在同一个进程的service,彼此之间有共同的内存区域,
所以对于某些数据的共享特别的方便和简单;
远程service:主要牵扯到不同进程间的service访问。因为android的系统安全的原因导致
了我们在不同的进程间无法使用一般的方式共享数据。因此:android为我们提供了一个AIDL
(android interface description language)接口描述语言;
3、Service生命周期:
service的生命周期相比于Activity比较简单:
onCreate() ---> onStart() ---> onDestroy() 这三个方法;
注:在一次生命周期中,服务只能被创建一次,销毁一次,但是可以启动多次;
在Activity中与service有关的方法为:
情况一:
startService(Intent intent); 启动一个service
stopService(Intent intent); 停止一个service
情况二:当想使用service中的一些数据的或者访问其中的一些方法时:
bindService(Intent intent,ServiceConnection conn,int flags);
unbindService(ServiceConnection conn);
参数说明:
参1:跳转到service的intent;
参2:conn 代表一个与service连接状态的类,当连接service成功或失败
时会主动触发其(ServiceConnection)内部的onServiceConnected()或者
onServiceDisconnected()方法,如果想要访问service的数据,那么可以
在onServiceConnected()方法中进行;
小贴士:
使用服务绑定,当acitivity生命周期结束后service的生命周期也跟着结束,
他们的关系时同存亡的;
4、service的使用步骤:
①:创建一个类继承service这个类;
②:每一个组件都要在androidManifest.xml中进行注册;
③:在Activiy中进行启动、绑定、解绑、或者精致service;
案例:实现音乐后台播放;
Activity代码部分:
service代码部分:
package com.example.service;
service与activity进行数据交互:
1、Service 简介:
Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可
视化界面,运行与后台的一种服务程序;
What is Service?
Service就是系统中的服务:
特点:
* 无法与用户直接进行交互;
* 必须由用户或者其他程序显示的来启动,优先级比较高;
* 比处于前台的应用优先级低,但是比后台的其他应用程序优先级高;
When?
当需要某些程序在后台运行的时候就使用Service;当Activity的生命周期结束的时候,
Service还是存在的;
2、Service的分类:本地service 和 远程service;
本地service:就是和当前的应用在同一个进程的service,彼此之间有共同的内存区域,
所以对于某些数据的共享特别的方便和简单;
远程service:主要牵扯到不同进程间的service访问。因为android的系统安全的原因导致
了我们在不同的进程间无法使用一般的方式共享数据。因此:android为我们提供了一个AIDL
(android interface description language)接口描述语言;
3、Service生命周期:
service的生命周期相比于Activity比较简单:
onCreate() ---> onStart() ---> onDestroy() 这三个方法;
注:在一次生命周期中,服务只能被创建一次,销毁一次,但是可以启动多次;
在Activity中与service有关的方法为:
情况一:
startService(Intent intent); 启动一个service
stopService(Intent intent); 停止一个service
情况二:当想使用service中的一些数据的或者访问其中的一些方法时:
bindService(Intent intent,ServiceConnection conn,int flags);
unbindService(ServiceConnection conn);
参数说明:
参1:跳转到service的intent;
参2:conn 代表一个与service连接状态的类,当连接service成功或失败
时会主动触发其(ServiceConnection)内部的onServiceConnected()或者
onServiceDisconnected()方法,如果想要访问service的数据,那么可以
在onServiceConnected()方法中进行;
小贴士:
使用服务绑定,当acitivity生命周期结束后service的生命周期也跟着结束,
他们的关系时同存亡的;
4、service的使用步骤:
①:创建一个类继承service这个类;
②:每一个组件都要在androidManifest.xml中进行注册;
③:在Activiy中进行启动、绑定、解绑、或者精致service;
案例:实现音乐后台播放;
Activity代码部分:
package com.example.service; import com.example.service.MyServiceForData.MyBinder; import android.app.Activity; import android.app.Service; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /* service 使用 测试 */ public class MainActivity extends Activity { /* 生命组件对象 */ private Button startService; private Button stopService; private Button bindService; private Button unbindService; private Button getData; private Intent intent; private Intent intentForData; /* 声明一个Binder对象, 用于指引到service中onBind()返回的Binder对象 */ private MyBinder binder=null; /* 表示与service连接状态的类 :ServiceConnection */ public ServiceConnection conn = new ServiceConnection() { /* 表示连接service失败 */ public void onServiceDisconnected(ComponentName name) { } /* 表示连接service成功 */ /* 参1:连接到service组件的名称 ; 参2:在service中返回的IBinder对象 */ public void onServiceConnected(ComponentName name, IBinder service) { binder = (MyBinder) service; } }; /* 获得组件对象 */ protected void init(){ startService = (Button) findViewById(R.id.startService); stopService = (Button) findViewById(R.id.stopService); bindService = (Button) findViewById(R.id.bindService); unbindService= (Button) findViewById(R.id.unbindService); getData = (Button) findViewById(R.id.getData); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 调用init()方法 , 初始化组件对象 */ init(); /* new一个Intent对象,实现service的调用 ,交互 */ intent = new Intent(MainActivity.this,MyService.class); intentForData = new Intent(MainActivity.this,MyServiceForData.class); /* 为startService写OnClickListener事件,开启service */ startService.setOnClickListener(new OnClickListener() { public void onClick(View v) { /* 启动服务 */ startService(intent); } }); /* stopService的OnClickListener事件,关闭service */ stopService.setOnClickListener(new OnClickListener() { public void onClick(View v) { /* 停止service */ stopService(intent); } }); /* 邦定service */ bindService.setOnClickListener(new OnClickListener() { public void onClick(View v) { /* 绑定service , bindService(); */ bindService(intentForData, conn, Service.BIND_AUTO_CREATE); } }); /* 解除绑定 */ unbindService.setOnClickListener(new OnClickListener() { public void onClick(View v) { /* 解绑service,unbindService() */ unbindService(conn); } }); /* 获取数据 */ getData.setOnClickListener(new OnClickListener() { /* 查看从service中或得到的数据 */ public void onClick(View v) { Toast.makeText(MainActivity.this, ""+binder.getCount(), 1000).show(); } }); } }
service代码部分:
package com.example.service;
import android.R; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; import android.util.Log; /* 创建自己的service , 要继承Service这个类; *//* 测试启动过程 */ public class MyService extends Service { /* 声明一个媒体对象 */ private MediaPlayer mediaPlayer ; /* 当用户显示的call startService之后首先调用 */ /* 创建service */ public void onCreate() { super.onCreate(); /* service创建的时候就获取MediaPlayer的对象 *//* 参1:上下文对象;参2:音乐文件资源ID*/ // mediaPlayer = MediaPlayer.create(this, 2); Log.i("MyService", "onCreate()..创建service.."); } /* 启动service */ public void onStart(Intent intent, int startId) { super.onStart(intent, startId); /* service启动的时候打开音乐 */ // mediaPlayer.start(); Log.i("MyService", "onStart()..开始service.."); } /* 停止服务 */ public void onDestroy() { super.onDestroy(); /* service停止的时候关闭音乐 */ // mediaPlayer.stop(); Log.i("MyService", "onDestroy()..停止service.."); } /* 绑定服务 */ public IBinder onBind(Intent intent) { return null; } }
service与activity进行数据交互:
package com.example.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; /* 测试访问service中的数据 *//* 案例:获取该服务中变量的值 */ /* 需要实现方法:onBind(); onUnbind(); onCreate(); onDestroy(); */ public class MyServiceForData extends Service { /* service中的变量 */ private int count = 0 ; private boolean flags; /* 创建MyBinder对象,用于onBind()方法返回一个Binder对象 */ MyBinder myBinder = new MyBinder(); /* 内部类:创建一个类MyBinder, 继承Binder */ public class MyBinder extends Binder{ /* 该内默认有个无参的构造方法 */ public MyBinder(){} /* 获取count的值 */ public int getCount(){ return count; } } /* 创建service */ public void onCreate() { super.onCreate(); Log.i("MyServiceForData", "onCreate()...创建service.."); /* service创建时,启动一个线程,用于完成对count值的改变 */ new Thread(){ /* run()方法里面程序就时现成执行的程序; *//* 该现成用于改变count的值 */ public void run(){ super.run(); while(!flags){ count++; } } }.start(); } /* 绑定service */ public IBinder onBind(Intent intent) { Log.i("MyServiceForData", "onBind()...绑定service.."); return myBinder; } /* 解绑service */ public boolean onUnbind(Intent intent) { Log.i("MyServiceForData", "onUnbind()...解绑service.."); return super.onUnbind(intent); } /* 停止service */ public void onDestroy() { super.onDestroy(); Log.i("MyServiceForData", "onDestroy()...停止service.."); } }
发表评论
-
Android 之 网络访问服务器,解析JSON数据
2014-03-28 22:50 3418提示:在访问网络,或者服务器的数据一定要注意 网络权限的声明: ... -
Android 之 AsyncTask 异步任务
2014-03-20 08:44 3524Android ... -
Android 之 Looper Handler Message 之间的关系
2014-03-19 10:16 3668Android 的消息 ... -
Android 之 多线程与Socket联合使用案例
2014-03-19 10:15 2676多线 ... -
Android 之 多线程和Socket套接字的使用介绍
2014-03-19 10:15 4885And ... -
Android 之 实现Runnable 接口与继承Thread的区别
2014-03-19 10:15 2199实现Runnable 接口 相 ... -
Android 之 GSON解析JSON数据
2014-03-19 10:14 4493... -
Android 之 使用Pull 解析xml文件
2014-03-18 21:04 1045/** * 使用Pull进行 xml 文件的解析 ... -
Android 之 使用DOM解析xml文件
2014-03-18 21:02 2745DOM 解析 xml 格式的文件 1、 xml简介:xml ... -
Android 之 百度API 密钥安全码生成
2014-03-04 22:29 2413近期要做个关于旅游助手的应用,开始接触百度API了。大神们 ... -
Android 之 EditText属性用法介绍
2014-01-06 23:49 3991EditText的属性 EditText继承关系:View-- ... -
Android 之 自定义适配器
2014-01-08 10:40 1775自定义适配器 1、实现 * 自定义适配器要继承 BaseA ... -
Android 之 自定义控件用法介绍
2014-01-08 10:40 1720自定义效果:实现:图片和文字混合 首先创建需要组合的子布局: ... -
Android 之 资源自适应与国际化
2014-01-08 10:40 3082<!-- 国际化和资源自适应 ... -
Android 之 Parcelable 序列化
2014-01-08 10:41 2699/* 序列化 * * 作 ... -
Android 之 五大布局案例
2014-01-08 10:41 21331、LinearLayout 线性布局例子: <Lin ... -
Android 之 通知Notification
2014-03-03 22:30 3897Notification 和 NotificationMana ... -
Android 之 手机全屏显示
2014-03-03 22:30 2345/* 1、全屏状态的显示 介绍:Android 中提供了Wi ... -
Android 之 拦截手机短信并自动转发
2014-03-03 22:29 5436拦截短信和发送短信都需要相关的权限: <?xml ve ... -
Android 之 将RAW资源文件写入SD卡工具类
2014-03-01 10:09 3615package com.sun.coptfiletosd; ...
相关推荐
NULL 博文链接:https://sunzone.iteye.com/blog/1998116
在Android开发中,Service是四大组件之一,它用于在后台执行长时间运行的操作,而不与用户交互。本篇文章将深入探讨“android学习之Service启动1”的主题,主要关注Service的启动方式及其基本用法。 首先,Service...
在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...
在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...
在Android应用开发中,`Service`和`Activity`是两个重要的组件。`Service`用于在后台执行长时间运行的任务,而`Activity`则负责用户界面交互。在某些场景下,我们可能需要在`Service`和`Activity`之间传递数据,比如...
在Android应用开发中,Service是四大组件之一,用于执行长时间运行的任务,如后台音乐播放、网络数据下载等。Service不同于Activity,它没有用户界面,但可以在后台持续运行,即使用户切换到其他应用也不会受到影响...
服务(Service)是Android四大组件之一,它在后台执行任务,不与用户界面交互。服务可以长时间运行,即使用户离开应用,服务仍然可以持续执行。 **二、远程服务原理** 1. **AIDL(Android Interface Definition ...
在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...
在"Android学习之Service练习"中,我们将深入探讨如何创建、启动和绑定到`Service`,以及`Service`在实际应用中的常见用途。 1. **什么是Service?** `Service` 是Android四大组件之一,用于执行长时间运行的操作...
综上所述,QT for Android下Service的创建是一项涉及多层技术融合的任务,包括Qt编程、Android原生服务的理解、JNI编程以及跨平台通信。通过熟练掌握这些技能,开发者可以构建出功能强大且高效的Android应用,充分...
Android服务(Service)是Android操作系统中四个核心应用程序组件之一,其他三个分别是Activity、BroadcastReceiver和ContentProvider,它们在Android应用开发中的作用和使用场景各不相同。Service的作用主要体现在...
在Android开发中,服务(Service)是用于在后台执行长时间运行任务的重要组件,不与用户界面直接交互。然而,有时我们需要在服务中弹出一个Dialog来通知用户或获取用户输入。`Android Studio`作为官方推荐的集成开发...
在Android开发中,服务(Service)是一个至关重要的组件,它允许应用程序在后台执行长时间运行的操作,即使用户没有与应用交互。本示例“Android local service demo”聚焦于本地服务(Local Service),它是Android...
本文将深入探讨如何使用MarsDaemon源码实现Android进程及Service的常驻,确保服务即使在用户退出应用或者系统清理内存时也能持续运行。 首先,了解Android的进程生命周期是至关重要的。Android系统为了优化资源管理...
"Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...
本文将深入探讨“Android Service之bound实现”,理解如何通过绑定服务(Bound Service)来创建一个与应用程序组件交互的服务。 首先,我们要了解服务的两种基本类型:Start Service和Bound Service。Start Service...
在Android系统中,服务(Service)是一种特殊类型的组件,它在后台执行长时间运行的操作而无需用户界面。在“android_service服务器”这个主题中,我们主要关注的是如何在Android应用程序中创建和管理服务,特别是...
android系统级的服务包含了Android Service 和Native Service . Android Service 也称作 Java Service ,是用JAVA语言编写的,实现在框架层。 Native Service 也称作 System Service ,是用C++语言编写的,实现...
在Android应用开发中,服务(Service)是一种在后台运行的组件,它不具有用户界面,但可以执行长时间的任务,如播放音乐、网络通信等。Service生命周期中的关键方法包括`onStartCommand()`和`onBind()`,前者用于...
Service是Android四大组件之一,用于在后台长时间运行任务,不受用户界面交互的影响。在这个"android 录音机 service 例子"中,我们将深入探讨如何结合Service和MediaRecorder来创建一个能够后台录制音频的应用。 1...