安卓的线程使用

   在安卓中很多时候我们会用到线程 ,举个例子如果说我从界面上获取到值 然后将值传递到接口,然后根据接口返回的东西执行下面的逻辑代码。由于本人的代码是用了很多的Tosat 提醒。所以就选择了Handler 。有时候会出现这种问题,在执行代码的时候因为是用线程去访问接口的 ,所以那个线程会和主线程一起运行。导致那个值是null 所以 第二次运行然后就会有值。所以请看解决方案。

   我们可以在外面声明创建一个线程 

      

 final Thread thread = new Thread(new Runnable(){
		            @SuppressWarnings("unchecked")
					@Override
		            public void run() {
		           
		                 try {
		                    Message message = new Message();
				            message.what = 1;
							map=(Map<String, Object>) search(default_code );
						         System.out.println(map);
				                 handler.sendMessage(message);//当返回值是null的时候就发送消息
				                 System.out.println("发送了消息");
						} catch (Throwable e) {
							e.printStackTrace();
						}
							
		            }
		            
		        });

这个代码块随便放到哪里都行。

然后我们最好在声明一个全局变量的handler,然后在我们需要执行的地方用这个handler将我们需要执行逻辑的代码块包裹住就行。在包裹住之前呢,我们需要执行我们的线程这样样子:

 new Thread(thread).start();

这个样子写会少一个线程的异常。之前我在写的时候发觉如果这样去更新,通知handler的话 如果是做一个简单的查询,更新界面,但是如果第二次去查询就会蹦掉出现一个线程的异常好像是不能启动还是什么的。在网上找了很多之后发觉这个样子写可以避免这个错误。

 最后我们的代码逻辑部分就是这样子的:

 new Thread(thread).start();
 handler= new Handler(){
		           @Override
		           public void handleMessage(Message msg){
		               super.handleMessage(msg);
		               if(msg.what == 1){
		               	System.out.println("更新后");
		             //这里写你需要执行的代码块即可  	
		               	}}};

这样就可以实现这个需求,当然如果数据量很小的话也可以用AsynTask.这个类异步请求。


如果有疑问可以发我的邮件:haiabi@163.com

转载于:https://my.oschina.net/wuao/blog/521628

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值