我们须要用下面方式来启动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是一致的

android service和activity的通讯的更多相关文章

  1. Android Service 通知Activity更新界面的方法研究

    Android Service 通知Activity更新界面的方法研究   Android的最重要的组件式service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. ...

  2. Android—Service与Activity的交互

    service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...

  3. Android Service与Activity之间通信的几种方式

    在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ ...

  4. Android:Service通知Activity更新界面

    Android有四大组件,其中包括service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. 1.首先Activity调用Service 这个是比较基础的,它有两种 ...

  5. Android Service与Activity之间通信

    主要分为: 通过Binder对象 通过broadcast(广播)的形式 Activity调用bindService (Intent service, ServiceConnection conn, i ...

  6. Android Service与Activity的交互

    Android中有时候需要在Service中改变Activity的UI,或者在Activity中修改Service中的数值.首先必须使用与Activity绑定的Service,有三种方式可以实现.第一 ...

  7. Service 启动Activity

    1, 在BroadcastReceiver中启动Activity的问题  *  * 如果在BroadcastReceiver的onReceive()方法中如下启动一个Activity  * Inten ...

  8. Android开机启动Activity或者Service方法

    本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...

  9. android Service Activity三种交互方式(付源码)

    android SDK提供了Service,用于类似Linix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Rem ...

随机推荐

  1. BZOJ 3533: [Sdoi2014]向量集( 线段树 + 三分 )

    答案一定是在凸壳上的(y>0上凸壳, y<0下凸壳). 线段树维护, 至多N次询问, 每次询问影响O(logN)数量级的线段树结点, 每个结点O(logN)暴力建凸壳, 然后O(logN) ...

  2. hdu 4162 Shape Number 最小表示法

    题目链接 给一个字符串, 将它想象成一个环, 然后从环中任意一个位置断开, 求断开后字典序最小的那种情况. 直接上模板.. #include <iostream> #include < ...

  3. CSS3 旋转 太阳系

    参考https://www.tadywalsh.com/web/cascading-solar-system/ 首先 旋转有两种方式  一种是使用 transform-origin  另一种是tran ...

  4. Azure 网站和通配符域

     本文章由Azure 网站团队软件开发工程师Michael Candido 撰写 一些 Web 应用程序需要使用多个子域,在某些情况下还需要动态添加新的子域.例如,一个多租户 Web 应用程序可使 ...

  5. BZOJ 3498 PA2009 Cakes(三元环处理)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k ...

  6. HDU 5768 Lucky7(CRT+容斥原理)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5768 [题目大意] 求出一个区间内7的倍数中,对于每个ai取模不等于bi的数的个数. [题解] 首 ...

  7. perl笔记

    更精确的空白字符串匹配 1.水平空白字符 Perl5.10之前,使用\s这种分类,不够精确,容易导致意料外的结果: Perl5.10中引入\h字符组,用来匹配任意水平空白字符(包括Unicode字符集 ...

  8. 取得phpcms网站下所有栏目的内容链接

    今天做了一个小功能,就是取得公司网站的所有文章的内容地址,公司网站是用phpcms 做的,感觉还蛮简单的,记录下: <?php $conf['DB_USER'] = 'user'; $conf[ ...

  9. 物理DG主备库切换时遇到ORA-16139: media recovery required错误

    在物理DG主备库切换时遇到ORA-16139: media recovery required错误 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRI ...

  10. linux下emacs安装

    1.下载地址:http://ftp.gnu.org/pub/gnu/emacs/ 下载文件:emacs-24.2.tar.gz 步骤: 一.安装依赖文件:  (先进入root:终端中输入 su -) ...