博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android:ServiceDemo
阅读量:5940 次
发布时间:2019-06-19

本文共 5604 字,大约阅读时间需要 18 分钟。

  效果图:

 

layout的main.xml:

  

MainActivity:

package com.wyl.servicedemo;import com.wyl.servicedemo.MyBindService.MyBinder;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.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {	Intent intent ;	Intent intent2;	MyBindService service;//定义一个类型为继承了Service类的MyBindService类的成员变量,	/*	 * 使用bindService(intent2, conn, Service.BIND_AUTO_CREATE);方式开启一个	 * Service服务必须实例化一个ServiceConnection用来接收extends Service的MyBindService里	 * 回传的数据	 */	ServiceConnection conn = new ServiceConnection() {		/**		 * 当启动源跟Service的连接意外丢失的时候会调用这个方法		 * 比如当Service崩溃了或者被强行kill了。		 */		@Override		public void onServiceDisconnected(ComponentName arg0) {			// TODO Auto-generated method stub			int s = service.SIZE;//			Toast.makeText(this, "onServiceConnected()方法所在线程为:"+Thread.currentThread().getName(), 100).show();			System.out.println("SIZE:"+s+",onServiceDisconnected()方法所在线程为:"+Thread.currentThread().getName());		}				@Override		public void onServiceConnected(ComponentName arg0, IBinder binder) {			//接收会传来的数据,根据这个service我们可以获取一些数据			service = ((MyBinder)binder).getService();			int s = service.SIZE;//			Toast.makeText(this, "onServiceConnected()方法所在线程为:"+Thread.currentThread().getName(), 100).show();			System.out.println("SIZE:"+s+",onServiceConnected()方法所在线程为:"+Thread.currentThread().getName());		}	};			@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);	}	public void onClick(View view) {		switch (view.getId()) {		case R.id.start:			intent = new Intent(MainActivity.this,MyService.class);			System.out.println("onClick.startService()");			Toast.makeText(this, "开启线程startService", 500).show();			startService(intent);			break;		case R.id.stop:			System.out.println("onClick.stopService()");			Toast.makeText(this, "关闭线程stopService", 500).show();			stopService(intent);			break;					case R.id.bind://绑定			intent2 = new Intent(MainActivity.this,MyBindService.class);			//第三个参数是自动开启服务的作用,第二个参数不能够为空,且为ServiceConnection conn类型,			bindService(intent2, conn, Service.BIND_AUTO_CREATE);			System.out.println("onClick.bindService()");			Toast.makeText(this, "开启绑定", 500).show();			break;					case R.id.unbind://解除绑定			stopService(intent2);			unbindService(conn);//解除绑定,这个参数一个不能够为空,unbindService(ServiceConnection conn);			System.out.println("onClick.unbindService()");			Toast.makeText(this, "解除绑定", 500).show();			break;					case R.id.music://播放音乐			service.Play();			Toast.makeText(this, "播放音乐", 500).show();			break;		case R.id.stopmusic://暂停音乐			service.Play();			Toast.makeText(this, "暂停音乐", 500).show();			break;		}	}}

  MyService.java (这个service只是用来普通的stopService(),和startService()):

package com.wyl.servicedemo;import android.app.Service;import android.content.Intent;import android.os.IBinder;public class MyService extends Service{	@Override	/*	 * Parameters		intent  The Intent that was used to bind to this service,		as given to Context.bindService. Note that any extras 		that were included with the Intent at that point will		 not be seen here. 	   Returns	   Return an IBinder through which clients can call on to the service. 	 */	public void onCreate() {		System.out.println("BindService.onCreate()");		super.onCreate();	};		public IBinder onBind(Intent arg0) {		// TODO Auto-generated method stub		System.out.println("BindService.onBind");		return null;	}	@Override	public int onStartCommand(Intent intent, int flags, int startId) {		// TODO Auto-generated method stub		System.out.println("onStartCommand()方法。。。。");		return super.onStartCommand(intent, flags, startId);	}		@Override	public void onDestroy() {		// TODO Auto-generated method stub		System.out.println("myServie.ondestroy()....");		super.onDestroy();	}}

  MyBindService.java :用bind的方式来绑定service,

package com.wyl.servicedemo;import android.app.Service;import android.content.Intent;import android.content.ServiceConnection;import android.os.Binder;import android.os.IBinder;public class MyBindService extends Service{	public static int SIZE = 3;	@Override	public void onCreate() {		System.out.println("onCreate()方法。。。");		super.onCreate();	}	/**	 * bind方式开启service,必须写一个类继承Binder,	 * 然后再IBinder onBind(Intent arg0)方法中返回所需要返回的值	 * @author wyl	 *	 */	public class MyBinder extends Binder{		public MyBindService getService(){			System.out.println("MyBinder extends Binder的MyBindService getService()方法。。。");			return MyBindService.this;		}	}		@Override	public IBinder onBind(Intent arg0) {		System.out.println("public IBinder onBind(Intent arg0) 方法。。。");		/*		 * onBind(Intent arg0),想回传数据,		 * 必须写上面的public class MyBinder extends Binder		 */		return new MyBinder();	}	@Override	public boolean onUnbind(Intent intent) {		System.out.println("onUnbind(Intent intent)方法。。。");		return super.onUnbind(intent);	}		@Override	public void unbindService(ServiceConnection conn) {		System.out.println("unbindService(ServiceConnection conn)方法。。。");		super.unbindService(conn);	}		@Override	public void onDestroy() {		System.out.println("onDestroy()方法。。。");		super.onDestroy();	}		public void Play(){		System.out.println("MyBindService.Play()方法,播放音乐");	}	public void Pause(){		System.out.println("MyBindService.Pause()方法,暂停");	}	}

  有一点要说明:写service或者自己定义了一个新的activity等,这些都需要在清单文件里进行注册。

否则不能够生效,有的时候程序还不报错,页面上还只是空白,所以不好找原因。要牢记一定在在清单文件里注册。

转载地址:http://ajmtx.baihongyu.com/

你可能感兴趣的文章
《C++语言入门经典》一2.8 左值与右值
查看>>
2017年安防监控中的那些核心云计算技术
查看>>
中国在科技领域崛起 美国人的保护主义蠢蠢欲动
查看>>
科大讯飞陶晓东:人工智能时代的医学影像 | CCF-GAIR 2017
查看>>
服务器市场步步为营:Intel发布新款至强Xeon E5-4600v4四路处理器
查看>>
智能合约不够安全?微软建专项小组从编程语言入手根治
查看>>
揭秘HPE的最新一代组合式基础设施Synergy
查看>>
晶科能源坐稳全球光伏组件制造商“头把交椅”
查看>>
光伏产品发展之路:从反倾销到欧盟加收税款
查看>>
2017-2021年中国大数据产业预测分析及全球市场规模预测
查看>>
消息总线(Spring Cloud Bus)
查看>>
以安全之名:俄罗斯强制所有消息应用留后门
查看>>
《VMware、Citrix和Microsoft虚拟化技术详解与应用实践》一1.1 虚拟化概述
查看>>
英国拟在其国内建立一套互联网过滤网
查看>>
加大力度改革 成都公安提高服务金融安防建设能力
查看>>
从创业到成功,SaaS巨头Salesforce靠的是这七大秘诀
查看>>
CJIS安全政策:企业如何确保FIPS合规性?
查看>>
对云计算的忽视是 银行的战略失误
查看>>
80个招聘求职网站整理,不管招聘or求职,看这个就够了!
查看>>
城市WiFi好看还应该好用
查看>>