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是一致的
android service和activity的通讯的更多相关文章
- Android Service 通知Activity更新界面的方法研究
Android Service 通知Activity更新界面的方法研究 Android的最重要的组件式service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. ...
- Android—Service与Activity的交互
service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...
- Android Service与Activity之间通信的几种方式
在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ ...
- Android:Service通知Activity更新界面
Android有四大组件,其中包括service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. 1.首先Activity调用Service 这个是比较基础的,它有两种 ...
- Android Service与Activity之间通信
主要分为: 通过Binder对象 通过broadcast(广播)的形式 Activity调用bindService (Intent service, ServiceConnection conn, i ...
- Android Service与Activity的交互
Android中有时候需要在Service中改变Activity的UI,或者在Activity中修改Service中的数值.首先必须使用与Activity绑定的Service,有三种方式可以实现.第一 ...
- Service 启动Activity
1, 在BroadcastReceiver中启动Activity的问题 * * 如果在BroadcastReceiver的onReceive()方法中如下启动一个Activity * Inten ...
- Android开机启动Activity或者Service方法
本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...
- android Service Activity三种交互方式(付源码)
android SDK提供了Service,用于类似Linix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Rem ...
随机推荐
- mlpack:可伸缩C++机器学习库(转)
摘要:mlpack是一个可伸缩C++机器学习库,它的目的是让新用户通过简单.一致的API使用机器学习,同时为专业用户提供C++的高性能和最大灵活性. mlpack是一个直观.快速.可伸缩的C++机器学 ...
- NETTY 编码器介绍
1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输.数据持久化或者其它用途. 反之,解码(Decod ...
- codeforces 535D. Tavas and Malekas KMP
题目链接 又复习了一遍kmp....之前都忘光了 #include<bits/stdc++.h> using namespace std; #define pb(x) push_back( ...
- mysql数据库字段区分大小写的设置方法
alter table t_25_thread_info modify column thread_id varchar(8) character set utf8 collate utf8_bin;
- sharepoint 2013 文档库 资源管理器打开报错 在文件资源管理器中打开此位置时遇到问题,将此网站添加到受信任站点列表,然后重试。
我们在使用sharepoint 2013的文档库或者资源库的时候,经常会需要用到使用“资源管理器”来管理文档,但是有时候,点击“使用资源管理器打开”,会提示如下错误: 在文件资源管理器中打开此位置时遇 ...
- jira使用
JIRA的生产者把JIRA定义为Professional Issue Tracker,即它是一个专业的问题跟踪管理的软件.这里的"问题"对应的英文单词是Issue,所以含义比较广, ...
- 数组名和指针的深入理解(C++)
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.魔幻数组名请看程序(本文程序在WIN32平台下编译): #includ ...
- linux下core文件调试方法(转载)
转自于:http://blog.csdn.net/fcryuuhou/article/details/8507775 在程序遇到段错误不寻常退出时,一般是访问内存出错.但是不会给出程序哪里出现的问题, ...
- 【转】QT QString, wchar_t *, TCHAR, CString和其他字符或字符串类型的转化
//QString to wchar_t *: const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileNa ...
- SQL Server 取前一天的0点和23点59分59秒
DECLARE @startDate1 DATE; DECLARE @startDate DATETIME; ,@startDate1); ,CONVERT(DATETIME,@startDate1) ...