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. Cookies操作类

    实现代码: //声名一个数据集合 var listString = new List<string>() { "a", "b", "c&q ...

  2. Head First 设计模式 —— 装饰器模式

    1. 装饰器模式与继承 与装饰器模式相比,继承更容易造成类爆炸: 装饰器模式:利用组合取代继承:

  3. 2017-3-12 leetcode 167 209 216

    ---恢复内容开始--- 对于每次开机avast喊出的“已经检测到危害”实在忍无可忍了(它只能检测到不能根除很气..)于是重装了系统,回到了win10感觉不赖. =================== ...

  4. 一个域名如何解析到多个ip地址

    一.域名解析多ip实例 简单一句话: dns 解析时多添加几个不同IP的A记录 例如: 上图中我给域名解析到两个不同的ip,大概等十分钟后我们ping 一下的结果如下 可以看到已经实现了一个域名解析到 ...

  5. ORACLE 11g 生产中高水位线(HWM)处理

    数据库中表不断的insert,delete,update,导致表和索引出现碎片.这会导致HWM之前有很多的空闲空间,而oracle在做全表扫描的时候会读取HWM一下的所有块,这样会产生更多的IO,影响 ...

  6. 在量化金融中15个最流行的Python数据分析库

    Python是当今应用最广泛的编程语言之一,以其效率和代码可读性著称.作为一个科学数据的编程语言,Python介于R和java之间,前者主要集中在数据分析和可视化,而后者主要应用于大型应用.这种灵活性 ...

  7. Centos 6 搭建邮箱服务器教程

    Centos 6 搭建邮箱服务器主要是是包括了Postfix, Dovecot和 MySQL了,下文我们详细的为各位介绍Centos 6 搭建邮箱服务器教程(Postfix, Dovecot和 MyS ...

  8. Fail2ban + firewalld 防护doss攻击

    系统环境:centos7.3 用途:利用fail2ban+Firewalld来防CC攻击和SSH爆破 准备工作: 1.检查Firewalld是否启用 #如果您已经安装iptables建议先关闭 ser ...

  9. DELPHI调试出现disconnected session的解决办法

    我在控制面板中,是禁用了UAC的,如下图 但是,在注册表中启用了UAC(EnableLUA), 工程中请求了管理员权限,如下图: 所以,整个权限请求混乱了. 解决办法,要么把注册表的LUA设置为0,要 ...

  10. C++序列化使用

    error C2248 无法访问私有成员 :原因 ifstream 作为参数必须传引用! (1):C++使用STL序列化:原文链接:http://blog.csdn.net/pandaxcl/arti ...