`
aswang
  • 浏览: 847922 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

一个Android Service小例子

 
阅读更多

写过一些android程序,但是android中的Service的组件却不曾用过,因此,对它也不甚了解,所以,今天写个小例子来学习如何使用Service。这其实也是我学习新东西的一个方法,对于陌生的东西,看书只是理论只是的了解,但是实际的情况如何,还是需要写些程序来测试,那样的理解更深刻。

 

测试目的:了解Service的生命周期,以及在startService和bindService时,Service如何响应。

程序界面如下:


 

1、编写Android Service需要基础Service类,并实现其中的onBind方法

 

 

/**
 * Android Service 示例
 * 
 * @author dev
 * 
 */
public class ServiceDemo extends Service {
	private static final String TAG = "ServiceDemo" ;
	public static final String ACTION = "com.lql.service.ServiceDemo";
	
	@Override
	public IBinder onBind(Intent intent) {
		Log.v(TAG, "ServiceDemo onBind");
		return null;
	}
	
	@Override
	public void onCreate() {
		Log.v(TAG, "ServiceDemo onCreate");
		super.onCreate();
	}
	
	@Override
	public void onStart(Intent intent, int startId) {
		Log.v(TAG, "ServiceDemo onStart");
		super.onStart(intent, startId);
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.v(TAG, "ServiceDemo onStartCommand");
		return super.onStartCommand(intent, flags, startId);
	}
}
 

 

2、在AndroidManifest.xml文件中声明Service组件:

<service android:name="com.lql.service.ServiceDemo">
			<intent-filter>
			    <action android:name="com.lql.service.ServiceDemo"/>
			</intent-filter>            
</service>

  其中的intent-filter中定义的action是用来启动服务的Intent。

 

3、在需要service的地方通过Context.startService(Intent)方法启动service或者Context.bindService方法来绑定service。

 

具体测试代码如下:

 

 

public class ServiceDemoActivity extends Activity {
	private static final String TAG = "ServiceDemoActivity";
	
	Button bindBtn;
	Button startBtn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        bindBtn = (Button)findViewById(R.id.bindBtn);
        startBtn = (Button)findViewById(R.id.startBtn);
        
        bindBtn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				bindService(new Intent(ServiceDemo.ACTION), conn, BIND_AUTO_CREATE);
			}
		});
        
        startBtn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				startService(new Intent(ServiceDemo.ACTION));
			}
		});
    }
    
    ServiceConnection conn = new ServiceConnection() {
    	public void onServiceConnected(ComponentName name, IBinder service) {
			Log.v(TAG, "onServiceConnected");
		}
		public void onServiceDisconnected(ComponentName name) {
			Log.v(TAG, "onServiceDisconnected");
		}
	};
	@Override
	protected void onDestroy() {
		Log.v(TAG, "onDestroy unbindService");
		unbindService(conn);
		super.onDestroy();
	};
}
 

 

4、日志输出:


上面的截图是点击绑定服务时输出的。可以看出,只调用了onCreate方法和onBind方法,当重复点击绑定服务时,没有再输出任何日志,并且不报错。onCreate方法是在第一次创建Service时调用的,而且只调用一次。另外,在绑定服务时,给定了参数BIND_AUTO_CREATE,即当服务不存在时,自动创建,如果服务已经启动了或者创建了,那么只会掉调用onBind方法。

 


上面的截图是在多次点击启动服务时输出的。可以看出,在第一次点击时,因为Service还未创建,所以调用了onCreate方法,紧接着调用了onStartCommand和onStart方法。当再次点击启动服务时,仍然调用了onStartCommand和onStart方法,所以,在Service中做任务处理时需要注意这点,因为一个Service可以被重复启动。

 

这里说一下,平常使用多的是startService方法,可以把一些耗时的任务放到后台去处理,当处理完成后,可以通过广播来通知前台。

而onBind方法更多的是结合AIDL来使用,这样一个应用可以通过绑定服务获得的IBinder来拿到后台的接口,进而调用AIDL中定义的方法,进行数据交换等。

 

后面将来学习AIDL!

 

 

  • 大小: 6.3 KB
  • 大小: 10.2 KB
  • 大小: 38 KB
4
3
分享到:
评论
5 楼 zhuzhihui12345 2016-07-29  
4 楼 aswang 2014-05-15  

@jjjssh 不同版本的android api可能会有所差异。这个示例是针对android2.3的 。

可以写个示例在手机上运行,观察具体的日志信息,来理解生命周期。
3 楼 jjjssh 2014-05-14  
引用

另外,在绑定服务时,给定了参数BIND_AUTO_CREATE,即当服务不存在时,自动创建,如果服务已经启动了或者创建了,那么只会掉调用onBind方法。


你的这段话,我有点迷糊。如果第二次点击"绑定服务"按钮的话,应该会再次调用bindService方法,按照你的说法,如果服务已经启动或则创建,哪么只会调用onBind方法,但实际中,没有再次打出“ServiceDemo onBind”的日志,请问我理解上有什么错误吗
2 楼 aswang 2014-05-10  
flyingsir_zw 写道
帮你补全了源码,分享出来
http://download.csdn.net/detail/flyingsir_zw/7276553



1 楼 flyingsir_zw 2014-04-30  
帮你补全了源码,分享出来
http://download.csdn.net/detail/flyingsir_zw/7276553

相关推荐

    Pro Android学习:Android service小例子

    这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

    android service 简单实例源代码

    该项目很可能是包含了一个简单的Service示例,展示了如何创建、启动、绑定Service以及使用Binder进行跨进程通信。通过分析ACDemo的源代码,你可以更好地理解这些概念,并将其应用到自己的项目中。 总之,Android ...

    android 录音机 service 例子

    在这个"android 录音机 service 例子"中,我们将深入探讨如何结合Service和MediaRecorder来创建一个能够后台录制音频的应用。 1. **Service基础** Service组件是Android应用开发中的关键部分,它可以在没有用户...

    android service 例子

    在Android应用开发中,`Service` 是一个非常重要的组件,它允许应用程序在后台长时间运行,即使用户已经离开了应用程序的界面。本示例将深入讲解如何创建和使用Android `Service`,这对于初学者来说是一个很好的起点...

    android service的小例子

    本示例“android service的小例子”将帮助初学者理解如何在Android Studio中创建并使用Service来实现一个简单的播放器服务。 首先,我们需要创建一个新的Service类。在Android Studio中,可以在项目的`src/main/...

    Android service 代码例子

    首先,我们来看`AndroidService`,这是本地服务的实现。在Android中,创建一个Service通常需要以下几个步骤: 1. 创建一个新的Java类,继承自`android.app.Service`。 2. 在新类中重写关键方法,如`onCreate()`, `...

    Android Service测试例子

    Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是...

    android应用程序小例子

    总的来说,"android应用程序小例子"涵盖了从基础的Hello World程序到复杂的网络请求、数据库操作等多个方面,每个小例子都是学习Android开发的重要组成部分。通过实践这些例子,开发者可以逐步提升自己的技能,最终...

    编写Android Service服务的一个源码例子

    首先,我们需要创建一个新的Service类,它继承自Android的`Service`基类。在`onCreate()`方法中初始化服务所需的工作,而在`onStartCommand()`方法中处理服务的启动请求。这两个方法是Service生命周期的核心。 ```...

    一个Android的入门例子

    ”应用开始,这正是"一个Android的入门例子"所代表的。这个项目是每个Android开发者必经的第一步,它帮助我们熟悉Android Studio IDE、布局设计、活动(Activity)概念以及运行机制。 首先,Android Studio是Google...

    android 中的服务Service intentService例子

    IntentService是Service的一个子类,专门设计用于处理一次性异步请求。它使用工作队列来序列化请求,每个请求在一个单独的工作线程中处理,完成一个任务后自动停止服务,降低了资源消耗。 2. IntentService生命周期...

    android service音乐播放例子.rar

    1. 创建Service类:首先,你需要创建一个继承自Service的类,例如MyPlayerService,然后在该类中实现音乐播放的逻辑。 2. 播放器组件:通常使用MediaPlayer或ExoPlayer作为音频播放器。MediaPlayer适合简单的音频...

    Android说明Service生命周期的代码例子

    以下是一个关于Service生命周期的详细解析,结合代码示例来阐述如何在Android中操作Service。 1. **Service生命周期概述** Service的生命周期主要包含以下几个阶段:onCreate()、onStartCommand()、onBind()、...

    Pro Android学习:Http service小例子

    在Android应用开发中,HTTP服务(Http Service)是连接应用程序与网络服务器的重要接口,用于发送HTTP请求并接收响应数据。...这个例子是一个很好的学习资源,可以帮助开发者提升在实际项目中的网络编程能力。

    android学习小例子

    在学习过程中,可以创建一个小型的Android应用,包含多个Activity,使用Service处理后台任务,通过Fragment展示不同内容,同时在合适的地方使用Dialog与用户交互。这样不仅能巩固理论知识,还能提高实际操作能力。 ...

    Android一个小闹钟例子

    以下将详细解析这个"Android一个小闹钟例子"所涵盖的技术点。 首先,我们需要理解Android的AlarmManager服务。AlarmManager是Android系统提供的一个用于安排周期性或者一次性任务的服务。在这个小闹钟例子中,...

    65 个 Android 开发入门小例子下载

    每个例子都是一次动手实践的机会,可以帮助初学者巩固理论知识,提高编程技巧。在学习过程中,建议结合官方文档和相关教程,以便更好地理解和应用这些实例。同时,不断调试和优化代码,将有助于培养解决问题的能力和...

    一个android的播放器例子

    本示例中的"TinyPlayer"就是一个这样的实现,它主要用于演示如何使用Activity和Service进行Intent交互,这是Android应用中两个核心的组件。下面我们将深入探讨这些知识点。 首先,Activity是Android应用的用户界面...

    Android经典代码例子

    这个"Android经典代码例子"集合提供了一系列实例,旨在帮助开发者深入学习Android应用开发的关键方面。以下是一些关键知识点的详细说明: 1. **Activity生命周期**:在Android中,Activity是应用程序的基本构建块。...

Global site tag (gtag.js) - Google Analytics