android四大组件之Service详解

今天学习了android四大组件中的Service,Service使用步骤基本上就是注册、启动、停止这三个步骤,今天我就拿自己做的一个demo来回顾一下学习的心得体会

1、首先,看一下demo运行的界面


布局文件的代码如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/startService"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="startService" />

    <Button
        android:id="@+id/stopService"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/startService"
        android:text="stopService" />

    <Button
        android:id="@+id/bindService"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/stopService"
        android:text="bindService" />

    <Button
        android:id="@+id/unbindService"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/bindService"
        android:text="unbindService" />

    <Button
        android:id="@+id/play"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/unbindService"
        android:text="play" />

    <Button
        android:id="@+id/pause"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/play"
        android:text="pause" />

    <Button
        android:id="@+id/next"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/pause"
        android:text="next" />

    <Button
        android:id="@+id/pervious"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/next"
        android:text="pervious" />

</RelativeLayout>


关于Service的启动方式,主要有两种,一种是直接使用startService();另一种是使用bindService()

我们先来看一下使用startService()方法来启动一个服务

想要启动一个服务,首先要先创建一个服务,写一个类然后继承Service,实现里面几个必要的方法,代码如下

package com.mytest.servicetest;

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

public class Mystartservice extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		System.out.println("Mystartservice------onBind");
		return null;
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		System.out.println("Mystartservice------onStartCommand");
		return super.onStartCommand(intent, flags, startId);
	}
	@Override
	public void onCreate() {
		System.out.println("Mystartservice------onCreate");
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		System.out.println("Mystartservice------onDestroy");
		super.onDestroy();
	}
	
}

写完服务之后我们需要在AndroidManifest.xml中通过service 标签注册我们的服务

<service android:name="com.mytest.servicetest.Mystartservice"></service>
然后我们就通过
<pre name="code" class="java">Intent <span style="font-family: Arial, Helvetica, sans-serif;">intent1=new Intent(MainActivity.this,Mystartservice.class);</span>
startService(intent1);

 每次启动一个服务, 
onCreate()方法只会执行一次,之后再启动服务,都会只调用onStartCommand();可以使用<span style="font-family: Arial, Helvetica, sans-serif;">stopService()来销毁一个服务</span>

如果采用的是bindService()方法开启一个服务,可能方法会比较复杂一点, 但是bindService()可以支持数据的回传

使用bindService()方法, 需要使用

bindService(intent2, connection,Service.BIND_AUTO_CREATE);

这里的三个参数,第一个代表了你要开的服务,第二个代表了ServiceConnection如果没有的话可以传null,第三个代表了自动创建服务

如果要销毁一个bindService()开启的服务,需要取消绑定,使用unbindService(connection);这里的参数和上面的参数一样的,这样就可以开启一个服务

这里是Mainacivity.java的代码

package com.mytest.servicetest;

import com.mytest.servicetest.MyBindService.mybind;

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.support.v7.app.ActionBarActivity;
import android.view.View;


public class MainActivity extends ActionBarActivity {

	Intent intent1;
	Intent intent2;
	MyBindService myBindService;
	ServiceConnection connection=new ServiceConnection() {
		
		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// TODO Auto-generated method stub
			myBindService=((mybind)service).getservice();
		}
	};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void myclick(View v) {
		switch (v.getId()) {
		case R.id.startService:
			intent1=new Intent(MainActivity.this,Mystartservice.class);
			startService(intent1);
			break;
		case R.id.stopService:
			stopService(intent1);
			break;
		case R.id.bindService:
			intent2=new Intent(MainActivity.this,MyBindService.class);
			bindService(intent2, connection,Service.BIND_AUTO_CREATE);
			break;
		case R.id.unbindService:
			unbindService(connection);
			break;
		case R.id.play:
			myBindService.play();
			break;
		case R.id.pause:
			myBindService.pause();
			break;
		case R.id.next:
			myBindService.next();
			break;
		case R.id.pervious:
			myBindService.pervious();
			break;
		}
	}
}

注:

当一个服务开启之后,需要我们手动去关闭,如果不关闭,服务将会一直运行在后台


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值