`

Android Service 之StartService()

 
阅读更多

Service是android 系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service的启动有两种方式:context.startService() context.bindService()。
 
使用context.startService() 启动Service是会会经历:
context.startService()  ->onCreate()- >onStartCommand()->onStart()->Service running
context.stopService() | ->onDestroy() ->Service stop 
 
如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。 
 
stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。
 
所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy

 

下面代码为startService()方法启动服务:

MainActivity:

 

package com.test.servicedemo;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
//import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
//import android.support.v4.app.NavUtils;

public class MainActivity extends Activity
{
	private Button btn_Start;
	private Button btn_Stop;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn_Start = (Button) findViewById(R.id.StartService);
		btn_Stop = (Button) findViewById(R.id.StopService);
		btn_Start.setOnClickListener(listener);
		btn_Stop.setOnClickListener(listener);
	}

	private View.OnClickListener listener = new View.OnClickListener()
	{
		
		@Override
		public void onClick(View v)
		{
			Intent intent = new Intent(MainActivity.this, ExampleService.class);//不可以把这句写在方法外面			

			// TODO Auto-generated method stub
			switch (v.getId())
			{
			case R.id.StartService:
				startService(intent);
				break;

			case R.id.StopService:
				stopService(intent);
				break;
			}

		}
	};

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}
 

ExampleService:

 

package com.test.servicedemo;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class ExampleService extends Service
{
	

	private static final String TAG = "ExampleService";

	@Override
	public void onCreate()
	{
		// TODO Auto-generated method stub
		super.onCreate();
		Log.i(TAG, "ExampleService-->onCreate");
	}

	@Override
	public void onDestroy()
	{
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i(TAG, "ExampleService-->onDestroy");
	}

	@Override
	public void onStart(Intent intent, int startId)
	{
		// TODO Auto-generated method stub
		super.onStart(intent, startId);
		Log.i(TAG, "ExampleService-->onStart");
	}
	@Override
	public IBinder onBind(Intent intent)
	{
		// TODO Auto-generated method stub
		return null;
	}


}
 

 

 

 

分享到:
评论

相关推荐

    Android Service之start实现

    本篇文章将深入探讨如何使用`startService()`方法来启动Android服务。 Service的启动方式主要有两种:`startService()`和`bindService()`。这里我们主要关注`startService()`,它是异步的,适合用于执行一次性或...

    android service 之一 (start service)

    在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本篇文章将深入探讨Android中的Start Service,这是一种启动Service的方式,它关注的是任务的启动而不是用户界面的反馈...

    Android service start方式启动

    本示例将探讨“startService”方式启动Android服务的基本概念、工作原理以及如何实现一个简单的服务示例。 首先,我们需要理解`startService()`这个方法。当你调用`startService()`时,Android系统会启动指定的服务...

    Android防止service多次执行startCommand

    在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...

    Android Service的startService

    当调用 `startService()` 时,Android系统会创建Service实例(如果尚未创建),然后调用Service的 `onStartCommand()` 方法。这个方法是Service执行任务的核心,开发者在这里实现具体的业务逻辑。 ```java public ...

    Android系统在新进程中启动自定义服务过程(startService)的原理

    "Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...

    android service 简单实例源代码

    在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...

    2011.09.01(3)——— android service startService bindService

    `startService` 是 Android 中启动 `Service` 的常见方式之一。当你调用 `startService()` 方法时,系统会创建一个 `Service` 实例,并执行 `onStartCommand()` 方法。这个方法是 `Service` 开始执行任务的地方。`...

    Android Service简单实例

    本篇文章将深入探讨`startService`类型的Android Service,通过一个简单的实例来展示其工作原理和使用方法。 `Service`分为两种主要类型:`Start Service`和`Bound Service`。`Start Service`主要用于执行非交互式...

    android startService分析

    在Android系统中,`startService`是一个至关重要的方法,它用于启动一个后台服务(Service)。服务是Android四大组件之一,允许应用程序在没有用户界面的情况下执行长时间运行的操作。本篇文章将深入探讨`start...

    android学习之Service启动1

    `startService()`主要用于启动一个无需与调用者直接交互的服务,服务一旦启动就会在后台持续运行,直到服务自行停止或系统因资源限制而杀死服务。`com.njupt.zhb.MusicPlay`这个文件名可能表示这是一个播放音乐的...

    Android Service之bound实现

    本文将深入探讨“Android Service之bound实现”,理解如何通过绑定服务(Bound Service)来创建一个与应用程序组件交互的服务。 首先,我们要了解服务的两种基本类型:Start Service和Bound Service。Start Service...

    android service toast 01

    Service的启动有两种方式:通过`startService()`和`bindService()`。`startService()`使Service在后台运行,直到`stopSelf()`或`stopService()`被调用;`bindService()`则创建一个与调用者绑定的服务,服务在客户端...

    Android Service深入解析Demo

    在Android应用开发中,Service是四大组件之一,它在后台长时间运行,不依赖于任何用户界面,用于执行长时间运行的任务,如播放音乐、网络通信等。这篇博客"Android Service深入解析Demo"通过实例深入讲解了Service的...

    Android服务startService联系

    用AndroidStudio编写,里面的Activity有三个按钮,用startService函数分别启动三个服务,一 个是通过继承Service类实现的服务,一个是通过继承Service类在里面定义一个线程来处理服务,还有一个是通过继承...

    android service的小实例

    在AndroidManifest.xml中声明Service后,我们可以通过Context.startService()方法启动Service。服务运行期间,应用可以随时调用stopService()来停止服务。 2. 绑定方式的Service 绑定方式的Service主要用于需要与...

    Android service讲解文档ppt

    4. 使用`startService()`或`bindService()`方法启动或绑定到Service。 接下来是Remote Service,它是运行在不同应用程序进程中的服务,通常用于跨进程通信(IPC)。Remote Service通过AIDL(Android Interface ...

    Android中startService()和bindService()的测试

    实例详解Android中startService()和bindService()的区别。 说明详见http://blog.csdn.net/a343902152/article/details/50857316

    Android-Service与Activity传值

    在`Activity`中启动`Service`,通常使用`startService()`方法,需要传入一个`Intent`对象,`Intent`中可以携带数据。例如: ```java Intent intent = new Intent(this, MyService.class); // 如果需要传递数据,...

    Android Service下载,EventBus更新界面

    startService()用于一次性启动服务并执行任务,而bindService()则用于与服务建立连接,进行双向通信。在Service中,我们可以创建一个下载任务,利用AsyncTask或者自定义线程去处理网络请求,避免阻塞主线程。 其次...

Global site tag (gtag.js) - Google Analytics