当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]android 的service和activity是运行在UI主线程的。在android线程中,只有主线程即UI线程有自己的默认的消息队列。子线程需要创建自己的消息队列,并把消息发给队列,并循环

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();

}

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

罗德与施瓦茨与SmartViser携手开发了一种用于测试符合欧盟销售的智能手机和平板电脑的新Energy Efficiency Index(EEI)标签法规的解决方案。该解决方案的核心是R&S CMX500,这是...

关键字: 智能手机 Android iOS

(全球TMT2023年8月24日讯)2023年8月23日,时值实时3D引擎Unity在华设立合资公司Unity中国一周年之际,Unity中国正式推出Unity中国版引擎——团结引擎。Unity全球CEO John Ri...

关键字: UNITY CE Android 开发者

报告显示:全球电商 App 获客花费接近50亿美元 北京2023年8月23日 /美通社/ -- 全球营销衡量与体验管理平台 AppsFlyer 近日发布《2023 电商 App 营销现状报告》。尽管面临全球经...

关键字: APPS BSP iOS Android

数字机顶盒是一种数字技术下的多媒体娱乐中心,可以实现电视节目接收、播放、存储、网络应用等多种功能。随着科技的发展,数字机顶盒的设计方案也在不断进步和优化。本文将介绍数字机顶盒设计的几种实现方案。

关键字: 数字机顶盒 Android Linux

21ic 近日获悉,原小米 9 号创始员工李明在社交媒体平台公布了旗下首款产品乐天派桌面机器人,为全球首款 Android 桌面机器人,面向极客和发烧友的 AI + 机器人。据悉,李明两个月前宣布创业并进军 AI 领域,...

关键字: 小米 Android 桌面机器人 AI

尽管安装增长放缓,全球游戏 App 获客花费仍高达 267 亿美元 经济低迷导致 2023 游戏 App 营销优先考虑收入指标,用户增长次之 北京2023年3月9日 /美通社/ -- 今天,全球营销衡量与体验管理平台...

关键字: APPS iOS Android BSP

量子计算领域的新里程碑,来了! 谷歌科学家证明,通过增加量子比特的数量,就能降低量子计算的错误率。

关键字: 谷歌 Android Windows

北京2023年2月23日 /美通社/ -- 亚马逊云科技日前宣布,领先的供应链服务企业顺丰供应链与亚马逊云科技聚力合作,打造智能化综合管理平台系统“数智门”,满足多场景园区物流需求,实现供应链端到端可视化。使用亚马逊云科...

关键字: 供应链 亚马逊 SERVICE 智能化

「卫星通讯」正在被普及到每一台智能手机当中。普及的动机并非是消费市场的一个刚需,其实更像是将差异化的功能「抹平」成一个标配。时下,支持「卫星通讯」功能的智能手机只有苹果的 iPhone 14 系列与华为的 Mate 50...

关键字: 卫星通讯 Android 智能手机 iPhone

Android是Google开发的操作系统,支持多种指令集架构 (ISA),包括Arm和x86,多数使用Android的设备都采用Arm架构芯片组。新兴RISC-V架构是免费开放指令集架构,任何人都可用它设计芯片,且无需...

关键字: 谷歌 Android RISC-V架构
关闭
关闭