android Service中多线程交互
android 的service和activity是执行在UI主线程的。
在android线程中,仅仅有主线程即UI线程有自己的默认的消息队列。子线程须要创建自己的消息队列。并把消息发给队列,并循环起来,发给handler处理。
1、Looper.prepare();给子线程创建消息队列。
2、Looper.loop();把消息放入消息队列并循环起来。
例如以下是一个通过activity的oncreate()方法启动服务,在服务里开启子线程,并发消息给主线程来处理的DEMO。
3、MainActivity.java例如以下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(MainActivity.this,ServiceTest.class));
}
4、ServiceTest.java
public class ServiceTest extends Service {
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
new Thread(){
@Override
public void run() {
Log.i("服务", "第2个线程");
Looper.prepare();
for(int i=10;i<20;i++){
Toast.makeText(getApplicationContext(), i+"",0).show();
try {
//Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
}
mHandler.sendEmptyMessage(2);
Looper.loop();
};
}.start();
break;
case 2:
new Thread(){
@Override
public void run() {
Log.i("服务", "第3个线程");
Looper.prepare();
for(int i=20;i<30;i++){
Toast.makeText(getApplicationContext(), i+"",0).show();
try {
//Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
}
mHandler.sendEmptyMessage(3);
Looper.loop();
};
}.start();
break;
case 3:
onDestroy();
break;
default:
break;
}
super.handleMessage(msg);
}
};
public ServiceTest() {
// TODO Auto-generated constructor stub
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Log.i("服务", "onCreate()");
super.onCreate();
new Thread(){
@Override
public void run() {
Log.i("服务", "第一个线程");
Looper.prepare();
for(int i=0;i<10;i++){
Toast.makeText(getApplicationContext(), i+"",0).show();
try {
//Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
}
mHandler.sendEmptyMessage(1);
Looper.loop();
};
}.start();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("服务", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i("服务", "onDestroy()");
super.onDestroy();
stopSelf();
}
}
附:demo下载地址http://download.csdn.net/detail/u014600432/8104521
android Service中多线程交互的更多相关文章
- Android Service+Socket 联网交互
android中,联网操作有http连接和socket连接两大类.由于项目需要,我们采取的是Socket连接.鉴于平时连接频繁,因此把Socket连接放到Service里,需要从服务器端获取数据时,只 ...
- android service中stub作用是什么?
AIDL(android 接口描述语言)是一个IDL语言,它可以生成一段代码,可以使在一个android设备上运行的两个进程使用内部通信进程进行交互.如果你需要在一个进程中(例如:在一个Activit ...
- Android: Service中创建窗口显示
WindowManager.LayoutParams: int TYPE_SYSTEM_ALERT Window type: system window, such as low power ale ...
- Android Service完全解析,关于服务你所需知道的一切(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...
- Android Service(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...
- Android Service完全解析,关于服务你所需知道的一切(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...
- [转]Android Service完全解析,关于服务你所需知道的一切
目录(?)[+] Android Service完全解析,关于服务你所需知道的一切(上) 分类: Android疑难解析2013-10-31 08:10 6451人阅读 评论(39) 收藏 举报 ...
- (转) Android Service完全解析,关于服务你所需知道的一切(上)
相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...
- 转:android service总结2
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...
随机推荐
- linux下的开源移动图像监测程序--motion编译与配置【转】
本文转载自:http://www.cnblogs.com/qinyg/p/3355707.html 前几天在网上偶然看到一篇博客,是利用linxu下的开源的motion搭建嵌入式视频动态监控系统,感觉 ...
- sql server drop login failed
https://stackoverflow.com/questions/37275/sql-query-for-logins https://www.mssqltips.com/sqlserverti ...
- 记录,javascript中对象的属性名是字符串,却可以不用引号
问题描述:今日看书,里面介绍js的对象的属性名是包括空字符串在内的所以字符串 问题来了,我们平时定义的对象如下,是没有引号""or’'的 var someone = { f ...
- css3 animate基本属性
Css3animate属性 属性 描述 Css Animation 所有动画属性的简写属性,除了animation-play-state属性 Animation:name duration timin ...
- BZOJ4518: [Sdoi2016]征途(dp+斜率优化)
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1875 Solved: 1045[Submit][Status][Discuss] Descript ...
- BOW模型在ANN框架下的解释
原文链接:http://blog.csdn.net/jwh_bupt/article/details/17540561 作者的视野好,赞一个. 哥德尔第一完备性定理,始终是没有能看完完整的证明,艹!看 ...
- mindmanager 2018 中文破解版_注册码_免激活
MindManager 2018是一个可视化的工具,可以用在脑力风暴(brainstorm)和计划(plan)当中.为商务人士提供更有效的.电子化手段捕捉.组织和联系信息(information)和想 ...
- 怎么用js或jq点击展开,出现隐藏的DIV,点击收起DIV又隐藏起来.
方法一:1 <script type="text/javascript"> $(function() { $("#toggle").click(fu ...
- Django 了解
Django是一个开放源代码的Web应用框架 Django也是一个基于 MVC 构造的框架. 但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Mod ...
- hust 1570 Lazy. Lazy. Laaaaaaaaaaaazy!
链接 1570 - Lazy. Lazy. Laaaaaaaaaaaazy! 题意 给出三种按键,caplock,shift,nomal(像正常键盘操作一样) ,输入三串字符串,s1,s2,txt, ...