首页 > 系统相关 >项目进程优化处理

项目进程优化处理

时间:2023-05-25 23:44:43浏览次数:34  
标签:处理 队列 Handler 线程 Looper 进程 优化 public 消息

  启用网络需在进程中启用,而和外面流程不相关,就出现信息更新滞后的情况,为此,做一些调查,将改变调用进程方式来实现。

l Handler 

通过Handler你可以发布或者处理一个消息或者是一个Runnable的实例。没个Handler都会与唯一的一个线程以及该线程的消息队列管理。当你创建一个新的Handler时候,默认情况下,它将关联到创建它的这个线程和该线程的消息队列。也就是说,假如你通过Handler发布消息的话,消息将只会发送到与它关联的这个消息队列,当然也只能处理该消息队列中的消息。 

主要的方法有: 

1)   public final boolean sendMessage(Message msg) 

把消息放入该Handler所关联的消息队列,放置在所有当前时间前未被处理的消息后。 

2)   public void handleMessage(Message msg) 

关联该消息队列的线程将通过调用Handler的handleMessage方法来接收和处理消息,通常需要子类化Handler来实现handleMessage。 

l Looper 

Looper扮演着一个Handler和消息队列之间通讯桥梁的角色。程序组件首先通过Handler把消息传送给Looper,Looper把消息放入队列。Looper也把消息队列里的消息广播给所有的Handler,Handler接受到消息后调用handleMessage进行处理。 

1)   可以通过Looper类的静态方法Looper.myLooper得到当前线程的Looper实例,假如当前线程未关联一个Looper实例,该方法将返回空。 

2)   可以通过静态方法Looper. getMainLooper方法得到主线程的Looper实例 

线程,消息队列,Handler,Looper之间的关系可以通过一个图来展现: 

在了解了消息队列及其相关组件的设计思想后,我们将把天气预告的案例通过消息队列来重新实现:

private EditText editText;

private Handler messageHandler;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

editText = (EditText) findViewById(R.id.weather_city_edit);

Button button = (Button) findViewById(R.id.goQuery);

button.setOnClickListener(this);

//得到当前线程的Looper实例,由于当前线程是UI线程也可以通过Looper.getMainLooper()得到

Looper looper = Looper.myLooper();

//此处甚至可以不需要设置Looper,因为 Handler默认就使用当前线程的Looper

messageHandler = new MessageHandler(looper);

}


@Override

public void onClick(View v) {

//创建一个子线程去做耗时的网络连接工作

new Thread() {

@Override

public void run() {

//活动用户输入的城市名称

String city = editText.getText().toString();

//调用Google 天气API查询指定城市的当日天气情况

String weather = getWetherByCity(city);

//创建一个Message对象,并把得到的天气信息赋值给Message对象

Message message = Message.obtain();

message.obj = weather;

//通过Handler发布携带有天气情况的消息

messageHandler.sendMessage(message);

}

}.start();

}


//子类化一个Handler

class MessageHandler extends Handler {

public MessageHandler(Looper looper) {

super(looper);

}

@Override

public void handleMessage(Message msg) {

//处理收到的消息,把天气信息显示在title上

setTitle((String) msg.obj);

}

}

标签:处理,队列,Handler,线程,Looper,进程,优化,public,消息
From: https://www.cnblogs.com/wudisanrenzu/p/17433333.html

相关文章

  • Linux下文本处理三剑客:grep、sed 和 awk
    grepgrep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是GlobalRegularExpressionPrint,表示全局正则表达式版本,它的使用权限是所有用户。grep[option]patternfilecata.txt|grep"hello"grep"hello"a.txtb.txtgrep-......
  • 选择排序算法之泛型优化
    选择排序算法工作原理:每一次从待排序的数据元素中选中最小的一个元素,然后,再从剩余未排序元素中继续寻找最小元素,将2个元素交换位置,就达到了已排序的元素一直是从小到大了。这个算法的时间复杂度为O(n²),空间复杂度为O(1)。/***@Author:翰林猿*@Description:选择排序*......
  • 前端处理后台返回的流数据
    1、接口请求的时候一定要加responseType:'blob',否则生产的文件会是空白(PDF)2、代码实现constbinaryData=[]binaryData.push(res)//res后台返回的流数据this.pdfUrl=window.URL.createObjectURL(newBlob(binaryData,{type:'application/pdf'}))......
  • Linux查看端口被那个进程占用
    netstat-antunlp|grep1521......
  • SpringBoot结合easyexcel处理Excel文件
    文/朱季谦假如有这样一个需求,每天需要读取以下表头的Excel文件,统计文件里击中黑名单的比例,该文件is_blacklist列的1表示击中了黑名单,0表示未击中黑名单。基于该需求,可以在定时任务通过easyexcel工具进行处理。一、首先需要在SpringBoot引入easyexcel的maven依赖<dependency>......
  • 60.Oracle 12c RAC DBCA无法识别ASM磁盘组故障处理
    安装oracle12crac时,在做dbca安装实例的时候,asm存储位置选项为空,但是命令集群中的磁盘组已经被mount了,asm实例也被起来了,经过排查,发现是grid用户下,su-grid cd$GRID_HOME/bin 这个目录下的oracle的权限不对,不是6751,因此,遂改,然后重启集群,再dbca创建实例,发现上面的存储位置......
  • Apache深入优化
    拓扑图:推荐步骤:在centos01安装Apache服务,配置Apache服务设置网站主页在centos02配置DNS服务使用bdqn域名在centos01配置Apache优化prefork和worker工作模式配置压力测试验证实验步骤:在centos01上安装apache服务配置网站配置apache服务启动服务查看运行状态修改apache网站根目录设置......
  • MYSQL性能优化-CPU/内存/磁盘
    CPU配置MYSQL的IO线程与CPU核数一致。通过以下命令查看当前配置的配置,默认4#showvariableslike‘%_io_threads’;只能通过修改配置文件来修改以上的配置innodb_read_io_threads=16innodb_read_write_threads=16配置后需要重启MYSQL服务内存超过4G内存则需要CPU支持64位......
  • 第三方接口控制请求时间处理
    问题项目中需要调用第三方接口,若第三方接口在X秒内未返回,则继续后续业务操作代码展示publicclassCheckTimeOutDemo{privatestaticExecutorServicethreadService=newThreadPoolExecutor(0,20,60L,TimeUnit.SECONDS,newSynchronousQueue<>(),r->{......
  • 几条比较实用的bat批处理脚本
    场景1:一个文件夹下有多个子文件夹,每个文件夹有若干jpg格式文件,需求是将每个文件夹下的文件按照索引依次修改名称:1.jpg,2.jpg,3.jpg@echooff&setlocalEnableDelayedExpansionfor/D%%din(*)do(cd%%dseta=1for/f"delims="%%iin('dir/b/a*.j......