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. bzoj1081: [SCOI2005]超级格雷码(dfs)

    1081: [SCOI2005]超级格雷码 题目:传送门 题解: 又是一道水题... 因为之前做过所以知道规律: 如n=2 B=3: 00 10 20    21 11 01    02 12 22 ...

  2. python spark 求解最大 最小 平均

    rdd = sc.parallelizeDoubles(testData); Now we’ll calculate the mean of our dataset.   1 LOGGER.info( ...

  3. 软件开发 —— 极限编程(XP:Extreme Programming)

    1. 软件开发的基本概念 软件开发的过程是:需求分析.设计.编码和测试. 2. 极限编程基本内涵 极限编程是一个轻量级的.灵巧的软件开发方法:同时它也是一个非常严谨和周密的方法. 它的基础和价值观是交 ...

  4. Java-杂项:Float 加减精度问题

    ylbtech-Java-杂项:Float 加减精度问题 1.返回顶部 1. java float 加减精度问题在取这个字段的时候转换成BigDecimal就可以了同时,BigDecimal是可以设置 ...

  5. 计算机网络自顶向下方法第2章-应用层(application-layer).2

    2.4 DNS:因特网的目录服务 2.4.1 DNS提供的服务 DNS的定义 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库 协议层面看,DNS是一个使得主机能够查询分布式数据库的应用 ...

  6. Android网络编程随想录(2)

    上篇文章介绍了传输层TCP协议的理论知识,本文主要介绍了TCP协议基础之上HTTP协议和HTTPS协议的理论知识. HTTP协议基于TCP协议定义了客户端向服务器请求数据的方式,它是面向事务的应用层协 ...

  7. html5左右滑动页面效果实现

    The Demo of h5 slider achiev by Myself 主要思路: 设置一个容器container,然后里面有几个page,获取到屏幕的宽度并将其赋值给page,然后contai ...

  8. ListView修改快速滑动的滑块

    1:如图 2: ListView加入快速滑动属性 <ListView android:id="@+id/listView" android:layout_width=&quo ...

  9. MongoDB 博客截图之一

    来源:十天掌握MongoDB之三:学会Find - 学吧网 - 专注于PHP资源分享

  10. Spring 获取propertise文件中的值

    Spring 获取propertise文件中的值 Spring 获取propertise的方式,除了之前的博文提到的使用@value的注解注入之外,还可以通过编码的方式获取,这里主要说的是要使用Emb ...