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中多线程交互的更多相关文章

  1. Android Service+Socket 联网交互

    android中,联网操作有http连接和socket连接两大类.由于项目需要,我们采取的是Socket连接.鉴于平时连接频繁,因此把Socket连接放到Service里,需要从服务器端获取数据时,只 ...

  2. android service中stub作用是什么?

    AIDL(android 接口描述语言)是一个IDL语言,它可以生成一段代码,可以使在一个android设备上运行的两个进程使用内部通信进程进行交互.如果你需要在一个进程中(例如:在一个Activit ...

  3. Android: Service中创建窗口显示

    WindowManager.LayoutParams: int TYPE_SYSTEM_ALERT  Window type: system window, such as low power ale ...

  4. Android Service完全解析,关于服务你所需知道的一切(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  5. Android Service(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  6. Android Service完全解析,关于服务你所需知道的一切(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  7. [转]Android Service完全解析,关于服务你所需知道的一切

      目录(?)[+] Android Service完全解析,关于服务你所需知道的一切(上) 分类: Android疑难解析2013-10-31 08:10 6451人阅读 评论(39) 收藏 举报 ...

  8. (转) Android Service完全解析,关于服务你所需知道的一切(上)

    相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...

  9. 转:android service总结2

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

随机推荐

  1. 在iOS开发中,我们会遇到十六进制和字符串之间相互转换,话不多说,直接上代码:

    //将十六进制的字符串转换成NSString则可使用如下方式: + (NSString *)convertHexStrToString:(NSString *)str { if (!str || [s ...

  2. DNS同时占用UDP和TCP端口53——传输数据超过512时候用tcp,DNS服务器可以配置仅支持UDP查询包

    DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP. ...

  3. 软件-集成开发环境:IDE

    ylbtech-软件-集成开发环境:IDE 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器. ...

  4. javaBean为什么要implements Serializable

    转自:https://www.cnblogs.com/jqlbj/p/6261592.html 一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的.因此如果要序 ...

  5. 几款jQuery右键菜单插件介绍

    在网页中使用自定义右键菜单,实现上皆为使用javascript禁用浏览器默认的右键菜单,然后在网页中响应鼠标右键事件,弹出自定义的菜单. 类似右键菜单的组件网上很多.一般而言,改变浏览器的默认菜单应当 ...

  6. [JavaEE] Hibernate连接池配置测试

    转载自51CTO http://developer.51cto.com/art/200906/129914.htm Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以 ...

  7. BZOJ 3509 分块FFT

    思路: 跟今年WC的题几乎一样 (但是这道题有重 不能用bitset水过去) 正解:分块FFT http://blog.csdn.net/geotcbrl/article/details/506364 ...

  8. 如何在在页面中清除一个已知的cookie?

    前些天在写一个项目的时候,使用cookie来存储一些用户数据,在用户登出时需要清理以往的数据,对于一个初学者来说,我需要学习如何清除一个已知的cookie. 首先,引入两个js文件: 1.jquery ...

  9. java题(转载)

    1.下面中哪两个可以在A的子类中使用:( ) class A { protected int method1 (int a, int b) { return 0; } } A. public int ...

  10. 【技术累积】【点】【java】【6】时间戳

    闲聊 加班多诶,写博客诶. 基本 时间戳,直观理解就是时间上面盖个戳罢了,在时间这个轴上面记录个点: unix时间戳表示从开始的时间点开始,经过了多少秒: 可以简单的看做是一个计时器: 基本定义可以直 ...