`

Android学习之启动Service

阅读更多

Service的生命周期有onCreate,onStart,onDestroy
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。
  1.通过startService
  Service会经历onCreate->onStart
  stopService的时候直接onDestroy  
  如果是调用者自己直接退出而没有调用stopService的
  话,Service会一直在后台运行。
  2.通过bindService
  系统会先调用服务的 onCreate()方法,接着调用onBind()方法。 
  调用者退出了,Srevice就会调用onUnbind->onDestroyed
  所谓绑定在一起就共存亡了。

如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致 多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。
如果调用者希望与正在绑定的服务解除绑定,可以调用 unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

 

ServiceActivity.java:

package com.demo.service;

import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.demo.broadcast.R;
import com.demo.service.BindService.MyBinder;

public class ServiceActivity extends Activity implements OnClickListener{

	public static final String TAG = "StartActivity";
    private Button startservice, stopservice, bindservice, unbindservice;
    private boolean flag;
    
    private ServiceConnection serviceConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName name, IBinder service) {
        	MyBinder binder = (MyBinder)service;
            BindService bindService = binder.getService();
            bindService.MyMethod();
            flag = true;
        }
        public void onServiceDisconnected(ComponentName name) {
            System.out.println("### Service UnBind Scucess .");
        }
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.start);
        flag = false;
        
        startservice = (Button) this.findViewById(R.id.startservice);
        startservice.setOnClickListener(this);
        stopservice = (Button) this.findViewById(R.id.stopservice);
        stopservice.setOnClickListener(this);
        
        bindservice = (Button) this.findViewById(R.id.bindservice);
        bindservice.setOnClickListener(this);
        unbindservice = (Button) this.findViewById(R.id.unbindservice);
        unbindservice.setOnClickListener(this);
    }
    
	@Override
	public void onClick(View v) {
		Intent intent = new Intent(ServiceActivity.this,StartService.class);  
		switch (v.getId()) {
		case R.id.startservice:
			startService(intent);  
			break;
		case R.id.stopservice:
			stopService(intent);
			break;
		case R.id.bindservice:
			bindService();
			break;
		case R.id.unbindservice:
			unbindService();
			break;
		default:
			break;
		}
	}

	private void unbindService() {
		if (flag) {
			Log.i(TAG, "** unbindService");
            unbindService(serviceConnection);
            flag = false;
        }
	}

	private void bindService() {
		Intent intent = new Intent(ServiceActivity.this, BindService.class);
        intent.putExtra("key", "Android BindService");
        bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE);
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		unbindService();
	}
}

 

 

 

StartService.java:

package com.demo.service;

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

public class StartService extends Service {
	public static final String TAG = "MyService";

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onCreate() {
		Log.i(TAG, "** Service onCreate(){}");
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		Log.i(TAG, "** Service onDestroy(){}");
		super.onDestroy();
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.i(TAG, "** Service onStartCommand(){}");
		return super.onStartCommand(intent, flags, startId);
	}

}

 

 

 

BindService.java:

package com.demo.service;

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

public class BindService extends Service {
	public static final String TAG = "BindService";
	private IBinder bind = new MyBinder();
	
	public void MyMethod(){
        Log.i(TAG, "BindService-->MyMethod()");
    }

    public class MyBinder extends Binder{
        public BindService getService(){
            return BindService.this;
        }
    }

	@Override
	public IBinder onBind(Intent intent) {
		Log.i(TAG, "*** onBind()");
		Log.i(TAG, "*** DATA = " + intent.getStringExtra("key"));
		return bind;
	}
}

 

 

 

配置文件:

 

<activity
            android:name="com.demo.service.ServiceActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<service android:name="com.demo.service.StartService"/>
        
<service android:name="com.demo.service.BindService"/>

 

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    android学习之Service启动1

    本篇文章将深入探讨“android学习之Service启动1”的主题,主要关注Service的启动方式及其基本用法。 首先,Service有两种启动模式:startService()和bindService()。`startService()`主要用于启动一个无需与调用者...

    Android学习之Service开机启动

    ### Android学习之Service开机启动详解 #### 一、引言 在Android开发中,有时我们需要让应用程序中的某个服务(Service)在设备启动时自动运行,例如进行后台数据同步、监控某些变化等。为了实现这一需求,可以...

    android服务自启动Service以及BroadcastReceiver和Notification.zip

    这个压缩包“android服务自启动Service以及BroadcastReceiver和Notification.zip”可能包含了关于如何在Android系统中实现这些功能的代码示例和教程。 1. **服务(Service)**: - Service是Android的一种组件,...

    Android学习之Service练习

    在"Android学习之Service练习"中,我们将深入探讨如何创建、启动和绑定到`Service`,以及`Service`在实际应用中的常见用途。 1. **什么是Service?** `Service` 是Android四大组件之一,用于执行长时间运行的操作...

    Android防止service多次执行startCommand

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

    Android学习之路——7.Service

    本篇文章将深入探讨“Android学习之路——7.Service”,分析Service的基本概念、使用方式以及常见应用场景,同时结合源码解析Service的工作原理,并提供一个实战Demo——Service_Demo。 一、Service基本概念 ...

    Android实例三:学习Service

    在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本实例将深入探讨如何在Android应用中使用Service,包括Service的基本概念、生命周期、启动方式以及与Activity的交互。 ...

    Android service start方式启动

    在Android应用开发中,服务(Service)是一种非常重要的组件,它允许你在后台执行长时间运行的操作,即使用户已经离开你的应用程序...通过学习和实践`Android_test_service`这个示例,初学者可以更好地掌握服务的使用。

    android service 之一 (start service)

    本篇文章将深入探讨Android中的Start Service,这是一种启动Service的方式,它关注的是任务的启动而不是用户界面的反馈。 首先,理解Service的基本概念至关重要。Service并非在单独的线程中运行,而是与应用程序的...

    android音乐播放器service学习案例

    3. **启动Service**:在需要播放音乐时,通过`startService()`方法启动Service。传递一个Intent,其中可以包含控制播放的额外参数。 4. **前台服务**:为了创建前台服务,我们需要创建一个Notification,并在`...

    Android 应用自启动

    在Android系统中,应用自启动是指应用程序在设备启动完成后自动运行的一种机制。这对于某些需要后台服务持续运行或者希望在用户开机后立即提供服务的应用来说是非常重要的。本篇将详细讲解如何实现Android应用的自...

    android中service组件自我学习练习

    9. **Service的测试**:可以通过Activity启动Service,观察Logcat日志来检查Service的生命周期回调,也可以通过AIDL(Android Interface Definition Language)进行远程服务测试。 通过这个自我学习练习,你应该...

    android 手机开机启动服务DEMO

    为了实现开机启动服务,BroadcastReceiver需要在`onReceive()`方法中启动Service。这通常通过调用`startService()`方法完成,传入Service的Intent来启动服务。Service启动后,会在后台执行其`onStartCommand()`方法...

    Android Service Demo

    在"Android Service Demo"中,我们可以看到如何从一个Activity启动Service,并传递数据给Service。 1. **启动Service**:在Activity中,我们可以通过调用`startService()`方法来启动一个Service。我们需要定义一个...

    Android停止Service的例程

    在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户离开了应用程序界面,Service依然可以运行。本教程将深入探讨如何正确地停止一个Android Service,同时结合源码分析其内部...

    【Android Demo】Native Service

    【Android Native Service ...通过分析和运行这个 Demo,你可以学习到如何将原生代码集成到 Android 服务中,以及如何高效地管理和控制这个服务。这对于开发需要高性能计算或直接硬件交互的应用来说,是非常有价值的。

    android--service实例

    - **启动Service**:通过调用Context的startService()方法,传入一个Intent对象,Intent中包含了要启动的Service的信息。Service会接收到onStartCommand()回调,执行相应任务。启动的服务通常用于执行一次性或周期性...

    Android Service深入解析Demo

    提到的"Exercise"可能是练习文件或者代码示例,通常在学习Service时,开发者会创建一个简单的Service项目,模拟启动Service,然后在另一个Activity中控制Service的启动和停止,或者绑定和解绑,以加深理解。...

    android service toast 01

    在Android开发中,Service是应用组件之一,它可以在后台长时间运行,即使用户界面不在活动状态。Service主要用于执行长时间运行的任务,如音乐播放、网络通信等。而`Toast`则是一种轻量级的通知方式,用于显示短暂的...

Global site tag (gtag.js) - Google Analytics