android service和activity的通讯

android service和activity的通讯

大家好,又见面了,我是全栈君。

我们须要用下面方式来启动service:

</pre><pre name="code" class="java"><span style="white-space:pre">		</span>Intent intent = new Intent();
		intent.setClass(MainActivity.this, MyService.class);
		<strong>bindService(intent,conn,BIND_AUTO_CREATE);</strong>

	ServiceConnection conn = new ServiceConnection() {
		
		@Override
		public void onServiceDisconnected(ComponentName name) {
		}
		
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			mService = ((MyService.MyBinder)service).getService();  
		}
	};
	

这时service会运行:onCreate和onBind

然后

我们去运行一些任务:

	ImageView item_image = (ImageView)findViewById(R.id.item_image);
		item_image.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				<strong>mService.setHandler(mHandler);
			   mService.startCheckIfUpgrade();</strong>
			}
		});


	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case GET_UPGRADE_INFORMATION_COMPLETE:
				System.out.println("=======notify need upgrade");
				AlertDialog dialog = getCustomDialog();
				dialog.show();
			default:
				break;
			}
		}
	};

Service的代码是:

public class MyService extends Service {

	/** thread to execute background task*/
	private Thread mThread = null;
	
	/** flag indicates if the service has been stopped*/
	private boolean mStopFlag = false;
	
	private static final int GET_UPGRADE_INFORMATION_COMPLETE = 202;
	
	/** Handler to get notify from thread*/
	private Handler mHandler = null;
	
	public void setHandler(Handler handler) {
		this.mHandler = handler;
	}
	
	
	@Override
	public boolean onUnbind(Intent intent) {
		System.out.println("====service onUnbind");
		return super.onUnbind(intent);
	}

	public class MyBinder extends Binder {
		/**
		 * 获取当前Service的实例
		 * 
		 * @return
		 */
		public MyService getService() {
			return MyService.this;
		}
	}
	
	public void startCheckIfUpgrade() {
		if(mThread == null){
			mThread = new UpgradeThread();
			mThread.start();
		}
	}
	   
	@Override
	public IBinder onBind(Intent arg0) {
		System.out.println("====service onBind");
		
		return new MyBinder();
	}
	
	/**
	 * @see android.app.Service#onCreate()
	 */
	@Override
	public void onCreate() {
		super.onCreate();
		System.out.println("====service onCreate");
	}

	private class UpgradeThread extends Thread{

		/**
		 * @see java.lang.Thread#run()
		 */
		@Override
		public void run() {
			super.run();
			//在这里写去服务端查看是否须要升级的逻辑
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			boolean ret = true;
			if(ret && !mStopFlag){
				Message msg = new Message();
				msg.what = GET_UPGRADE_INFORMATION_COMPLETE;
				mHandler.sendMessage(msg);
			}
		}
		
	}
	
	/* (non-Javadoc)
	 * @see android.app.Service#onDestroy()
	 */
	@Override
	public void onDestroy() {
		System.out.println("====ondestroy");
		mStopFlag = true;
		try {
			if (null != mThread && mThread.isAlive()) {
				try
				{
					mThread.stop();
				}
				catch (Exception e)
				{
				}
			}
			mThread = null;
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		super.onDestroy();
		System.gc();
	}

}

当activity销毁后Service会运行:

onUnbind和onDestroy

这个说明这个service的生命周期和activity是一致的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116014.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(4)


相关推荐

  • idea设置文件头注释_idea设置方法注释

    idea设置文件头注释_idea设置方法注释idea和eclipse的注释还是有一些差别的。idea:类头注释:打开file->setting->Editor->FilrandCodeTemplates->Includes->FileHeader直接在右边的文件框里编辑你说需要注释的东西,然后应用保存之后,当你创建类的时候就会自动生成注释。方法注释:打开file->setting->Editor->LiveTemplate

  • c++ 的map、iterator用法[通俗易懂]

    c++ 的map、iterator用法[通俗易懂] https://blog.csdn.net/bangdingshouji/article/details/73028424参考:资料一:http://www.cplusplus.com/reference/iterator/(第一参考,简单精要) 资料二:http://jjhou.boolan.com/programmer-3-traits.pdf(侯捷随笔,非常全面,有时间深刻可…

    2022年10月28日
  • java 时间轮算法_时间轮算法(TimingWheel)是如何实现的?

    java 时间轮算法_时间轮算法(TimingWheel)是如何实现的?前言我在2.SOFAJRaft源码分析—JRaft的定时任务调度器是怎么做的?这篇文章里已经讲解过时间轮算法在JRaft中是怎么应用的,但是我感觉我并没有讲解清楚这个东西,导致看了这篇文章依然和没看是一样的,所以我打算重新说透时间轮算法。时间轮的应用并非JRaft独有,其应用场景还有很多,在Netty、Akka、Quartz、ZooKeeper、Kafka等组件中都存在时间轮的踪影。我们…

  • webstorm激活码【中文破解版】

    (webstorm激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

  • py文件的运行

    安装过程及配置安装过程及配置安装过程及配置安装过程准备:下载好Python的安装程序后,开始安装,在进入安装界面后一定确保勾选将Python加入到系统环境变量的路径里。如图所示:2如果没有

  • 实验室设备管理系统C语言——课程设计实习「建议收藏」

    实验室设备管理系统C语言——课程设计实习「建议收藏」本题目将建立一个实验室设备管理系统,记录实验室所有的实验设备,并及时反响设备的运转状况,使用情况,设备购进以后及时记录设备相关信息,对彻底损坏的设备进行报废,维修的设备信息及有更改信息的设备进行统计,解决人工管理系统没解决的问题以及实现对用户更方便的功能,对由严重问题故障的要及时修理,并记录修理日期、设备名、编号、修理厂家、修理费用、责任人等新设备购入后要立即进行设备登记,包括类别、设备名、编号、型号、规格、单价、数量、购置日期、生产厂家保质期和经办人等信息。随时对现有设备及其修理、报废情况进行统计。

    2022年10月13日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号