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是一致的

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

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

(4)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于python的个人博客系统的设计开题报告_基于SSM的个人博客系统设计开题报告…「建议收藏」

    基于python的个人博客系统的设计开题报告_基于SSM的个人博客系统设计开题报告…「建议收藏」本科毕业设计(论文)开题报告题目:基于SSM的个人博客系统设计与实现专题题目(若无专题则不填):本课题来源及研究现状:关于博客的未来:在创办了博客中国(blogchina)、被誉为“博客教父”的方兴东接受了记者的专访。他认为,博客这一事物在中国的发展大致经过以下三个阶段:第一阶段是2002年至2003年,少数人写博;第二阶段是2003年至2005年,博客爱好者写博;第三阶段是2…

    2022年7月21日
    15
  • babel es6转es5原理_vue用es6还是es5

    babel es6转es5原理_vue用es6还是es5npminstall–save-devbabel-preset-es2015babel-cli.babelrc文件”presets”:[“es2015”],

    2022年9月15日
    2
  • stopwords.txt中英文数据集,四川大学机器智能实验室停用词库,哈工大停用词表,中文停用词表,百度停用词表百度网盘下载

    stopwords.txt中英文数据集,四川大学机器智能实验室停用词库,哈工大停用词表,中文停用词表,百度停用词表百度网盘下载今天找stopwords.txt数据集找了好长时间,真是气死了,好多都是需要金币,这数据集不是应该共享的么。故搜集了一些数据集,主要包括四川大学机器智能实验室停用词库,哈工大停用词表,中文停用词表,百度停用词表和一些其他的stopword.text。最后用python将这些数据集合并成一个完整的数据集stopword.txt。百度网盘地址在链接:https://pan.baidu.com/s/1KBkOzYk-wRYaWno6HSOE9g提取码:4sm6文件不是很大可以直接下载。下面是详细的目录。

    2022年6月24日
    26
  • evaluateJavascript_javascript alert报错

    evaluateJavascript_javascript alert报错当前位置:我的异常网»Ajax»jquery.validationEngine验证AJAX不起作用解决方jquery.validationEngine验证AJAX不起作用解决方法www.myexceptions.net网友分享于:2013-03-26浏览:232次jquery.validationEngine验证AJAX不起作用解决办法使用ajax时返回必须是js…

    2022年9月27日
    2
  • 完全合并C++面试题

    完全合并C++面试题

    2021年12月31日
    40
  • eagleEye_分析特性

    eagleEye_分析特性EagleEye是一个利用移动设备进行人脸识别的系统,在多人环境下,低像素的输入仍能够保持正确性这里关注的点分为两个部分: ContentAdaptivepipelineselection SpatialIndependenceandParallelism 内容自适应的流程选择(ContentAdaptivepipelineselection)这项技巧用于优化复杂的多DNN人脸识别pipeline的执行,并且还能保持高的正确率…

    2022年8月16日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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