Service

Service(1)

在android开发中,Services是一个很重要的组成部分,它的作用就是当你正在做一件事而又想做另外一件事的时候,而你又不想让正在做的事停止,这时就用到了Service。如果某些程序需要的部分操作是很耗时间的,那么可以将这些程序定义在Service中,即:Service是一个没有图形界面的Activity程序,而且当用户要执行某些操作需要进行跨进程访问的时候也可以使用Service完成,Service的主要功能是为Activity程序提供一些必要的支持,就像一个得力帮手。

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <!-- 定义四个按钮组件 -->
    <Button
        android:id="@+id/but1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动service" />
    <Button
        android:id="@+id/but2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止service" />
    <Button
        android:id="@+id/but3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="绑定service" />
    <Button
        android:id="@+id/but4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="解除绑定service" />
</LinearLayout>

MainActivity.java文件内容。

package com.example.service1;
import com.example.service1.myServiceUtil.BinderImpl;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button but1, but2, but3, but4;
	/*
	 * 当我们在没有服务与Activity进行绑定就去解除绑定时,就会出现错误,所以
	 * 在解除绑定之前要先进行判断,所以在此新建了一个接口IsNull()用于判断。
	 * 在这个接口中什么抽象方法都没有,它仅仅是要实现判断的功能。
	 */
	private IsNull service = null;
	/*
	 * ServiceConnection接口的主要功能是当一个Activity程序与Service建立连接后,可以通过
	 * ServiceConnection接口执行Service连接(或取消连接)的处理操作,在Activity连接到Service
	 * 程序上之后会触发Service类中的OnBind()方法,在此方法中要返回一个android.os.IBinder
	 * 接口的对象
	 */
	private ServiceConnection serviceConnection = new ServiceConnectionImpl();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//取得按钮组件
		but1 = (Button)findViewById(R.id.but1);
		but2 = (Button)findViewById(R.id.but2);
		but3 = (Button)findViewById(R.id.but3);
		but4 = (Button)findViewById(R.id.but4);
		//设置事件监听器
		but1.setOnClickListener(new OnStartClickListenerImpl());
		but2.setOnClickListener(new OnStopClickListenerImpl());
		but3.setOnClickListener(new OnBindClickListenerImpl());
		but4.setOnClickListener(new OnUnBindClickListenerImpl());
	}
	private class OnStartClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View v) {
			//Service由此开始
			MainActivity.this.startService(new Intent(MainActivity.this,
					myServiceUtil.class));
		}
	}
	private class OnStopClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View v) {
			//Service结束
			MainActivity.this.stopService(new Intent(MainActivity.this,
					myServiceUtil.class));
		}
	}
	private class OnBindClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			/*
			 * bindService是用来绑定Service服务的,也就是说Service就和调用bindSevice的组件绑定在一起了。
			 * 同生共死了,参数解释:第一个参数:表示与服务类相关联的Intent对象,用于指定所要启动Service
			 * 第二个参数:该参数是一个ServiceConnection对象,该对象用于监听访问者与Service之间的连接情况
			 * 当访问者与Service之间连接成功时,将回调该ServiceConnection对象的onServiceConnected()
			 * 方法。第三个参数:指定绑定时是否自动创建Service(如果Service还未创建),该参数可以指定0(不自动创建)
			 * 或BIND_AUTO_CREATE(自动创建)
			 */
	
			MainActivity.this.bindService(new Intent(MainActivity.this,
					myServiceUtil.class), MainActivity.this.serviceConnection,
					Context.BIND_AUTO_CREATE);
		}
	}
	private class OnUnBindClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			if (MainActivity.this.service != null) {
				//unbindService是用来解除绑定Service服务的
				MainActivity.this
						.unbindService(MainActivity.this.serviceConnection);
				//解除绑定后就把service设置为空,所以当再去点击解除绑定时就不会有错误出现
				MainActivity.this.service = null;
			}
 		}
	}
	private class ServiceConnectionImpl implements ServiceConnection {
		@Override
		// 此方法在连接正常关闭的情况下是不会被调用的,只有在Service被破坏或被杀死了才会调用,
		// 例如资源不足,要关闭一些Services。
		public void onServiceDisconnected(ComponentName name) {
		}
		@Override
		// 建立Service服务连接时调用
		public void onServiceConnected(ComponentName name, IBinder service) {
			// BinderImpl是IBinder接口的子类,所以向下转型为BinderImpl
			// 然后通过此类对象为Service接口实例化
			MainActivity.this.service = (BinderImpl) service;
		}
	}
}
myServiceUtil.java文件的内容。

package com.example.service1;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
public class myServiceUtil extends Service {
	private IBinder myBinder = new BinderImpl();  
 
	@Override
	public IBinder onBind(Intent intent) {
		System.out.println("-----onBind()方法被调用-----");
		return this.myBinder;
	}

	/*
	 * BidnderImpl是IBinder和IsNull接口的共同子类 只要调用了OnBind()方法那么IsNull就不会为空,
	 * 没有调用就说明IsNull为空也就间接对是否绑定进行了判断。
	 */
	public class BinderImpl extends Binder implements IsNull {
		@Override
		public String getInterfaceDescriptor() {
 			return  "myServiceUtil class-----";
		}
	}
	@Override
	public boolean onUnbind(Intent intent) {
		System.out.println("-----onUnbind()方法被调用-----");
		return super.onUnbind(intent);
	}
	@Override
	public void onRebind(Intent intent) {
		System.out.println("-----onRebind()方法被调用-----");
		super.onRebind(intent);
	}
	@Override
	public void onCreate() {
		System.out.println("-----onCreate()方法被调用-----");
		super.onCreate();
	}
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		System.out.println("-----onStartCommand()方法被调用-----");
		//继续执行
		return Service.START_CONTINUATION_MASK;
	}
	@Override
	public void onDestroy() {
		System.out.println("-----onDestroy()方法被调用-----");
		super.onDestroy();
	}
}
IsNull.java接口 的内容。

package com.example.service1;

public interface IsNull {

}

注:当我们启动Service的时候,onCreate()方法和onStartCommand()方法被调用。当我们停止Service的时候OnDestroy()方法被调用。当我们绑定Service的时候onBind()方法被调用,当接触绑定的时候onUnBind()方法被调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙潭一条鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值