关于handler 信息接收 问题。。。。。

问题描述

package com.rock;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.util.AttributeSet;import android.view.View;public class RockActivity extends Activity {/* * 动态图形的绘制基本思路是,创建一个类继承View(或surfaceView)覆盖 * onDraw()方法,使用 Canvas对象在界面上绘制不同的图形,使用invalidate() * 方法刷新界面 。下面是一个弹球实例 运用动态图形绘制基本思路。 */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); RockView rockView=new RockView(this, null); setContentView(rockView); } class RockView extends View implements Runnable{ private int x=20,y=20;protected void onDraw(Canvas canvas) {//实例化画笔Paint paint=new Paint();//设置画笔颜色paint.setColor(Color.GREEN);canvas.drawCircle(x, y, 10, paint);super.onDraw(canvas);}public RockView(Context context, AttributeSet attrs) {super(context, attrs);//获得焦点setFocusable(true);new Thread(this).start();}/* *E/AndroidRuntime( 4582): java.lang.RuntimeException: * Can't create handler inside thread that has not called Looper.prepare() * * 解决方法之一 在 run()方法 前 加Looper.prepare() 末尾 加Looper.loop(); */public void run() {Looper.prepare();RefreshHandler refreshHandler=new RefreshHandler();while(!(Thread.currentThread().isInterrupted())){Message msg=new Message();msg.what=0x101;refreshHandler.sendMessage(msg);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}Looper.loop();}class RefreshHandler extends Handler{public void handleMessage(Message msg) { if(msg.what==0x101){ RockView.this.update(); RockView.this.invalidate(); }super.handleMessage(msg);}}private void update(){int height=getHeight();y+=5;if(y>=height){y=20;}} }}这个 handler数据可以发送,为什么 接受不了呢? 求指教

解决方案

public class RockActivity extends Activity { /* * 动态图形的绘制基本思路是,创建一个类继承View(或surfaceView)覆盖 * onDraw()方法,使用 Canvas对象在界面上绘制不同的图形,使用invalidate() * 方法刷新界面 。下面是一个弹球实例 运用动态图形绘制基本思路。 */ private RefreshHandler refreshHandler = null; private RockView rockView = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); refreshHandler = new RefreshHandler() ; rockView=new RockView(this, null); setContentView(rockView); } class RockView extends View implements Runnable{ private int x=20,y=20; protected void onDraw(Canvas canvas) { //实例化画笔 Paint paint=new Paint(); //设置画笔颜色 paint.setColor(Color.GREEN); canvas.drawCircle(x, y, 10, paint); super.onDraw(canvas); } public RockView(Context context, AttributeSet attrs) { super(context, attrs); //获得焦点 setFocusable(true); new Thread(this).start(); } /* *E/AndroidRuntime( 4582): java.lang.RuntimeException: * Can't create handler inside thread that has not called Looper.prepare() * * 解决方法之一 在 run()方法 前 加Looper.prepare() 末尾 加Looper.loop(); */ public void run() { Looper.prepare(); // RefreshHandler refreshHandler=new RefreshHandler(); while(!(Thread.currentThread().isInterrupted())){ Message msg=new Message(); msg.what=0x101; refreshHandler.sendMessage(msg); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } Looper.loop(); } private void update(){ int height=getHeight(); y+=5; if(y>=height){ y=20; } } } /*--class refreshHandler--*/ class RefreshHandler extends Handler{ public void handleMessage(Message msg) { if(msg.what==0x101){ rockView.update(); rockView.invalidate(); } super.handleMessage(msg); } } /*--class refreshHandler--*/}这个改好了 在主线程中创建接收消息的handler,然后在方法里面更新RockView对象,全局变量
解决方案二:
楼主试试看RockView.this.invalidate();换成RockView.this.postinvalidate();还有你这个handler是在class RockView 这个类里面的吧,handler不是应该用来给UI主线程发送消息的吗,主类是class RockActivity我自己写的刷新VIEW的方式private Handler handler = new Handler(); private Runnable runnable = new Runnable() { public void run() { im.postInvalidate(); handler.postDelayed(this, 1000);// 这个是不断刷新,间隔1秒 } }; new Thread(runnable).start();
解决方案三:
因为你只写了一个发送消息的handler这个一直运行,但是没有接受消息的handler一直运行你让谁去接收你的消息。而且就算接受了你的消息,在调用invalidate()方法时也会报错,因为要刷新这个view必须在创建这个view的线程中

时间: 2024-08-02 15:17:11

关于handler 信息接收 问题。。。。。的相关文章

微信公众平台推送信息接收,无法获取返回的xml信息

问题描述 微信公众平台推送信息接收,无法获取返回的xml信息 微信公众平台测试时,出现以下问题明文模式兼容模式求助大神解决下问题 解决方案 微信公众平台获取用户信息 解决方案二: 你发的数据需要是对应要求的xml格式,你直接发null肯定错误的

Android Mms之:接收信息流程(图文详解)_Android

信息的接收工作是由底层来完成的,当有一个 新的信息时底层完成接收后会以Intent的方式来通知上层应用,信息的相关内容也包含在Intent当中,Android所支持的信息Intent都定义在android.provider.Telephony.Intents里面.短信的接收 短信接收,对于上层应用程序来讲就是要处理广播事件SMS_RECEIVED_ACTION,它是由Frameworks发出告诉上层有新的SMS已收到.在Mms中,是由PrivilegedSmsReceiver来处理,它收到SMS

Android Mms之:接收信息流程(图文详解)

信息的接收工作是由底层来完成的,当有一个 新的信息时底层完成接收后会以Intent的方式来通知上层应用,信息的相关内容也包含在Intent当中,Android所支持的信息Intent都定义在android.provider.Telephony.Intents里面.短信的接收 短信接收,对于上层应用程序来讲就是要处理广播事件SMS_RECEIVED_ACTION,它是由Frameworks发出告诉上层有新的SMS已收到.在Mms中,是由PrivilegedSmsReceiver来处理,它收到SMS

新增TinyMessage,并实现邮件接收处理

序言 我们在业务处理过程中,经常要处理各种信息,比如:站内信息.邮件信息.还可能有短信.彩信,甚至可能与各种IM软件进行对立的信息系统. Tiny框架也需要面对这个问题,不一样的是我觉得这几种类型的信息处理模式都是一样的,因此试图采用统一的模式进行处理. 在开始之前,我们先梳理一下需求: 可以支持各种信息系统如:短信,彩信,邮件,IM,站内信息的接收与发送 在接收或发送消息的时候可以进行各种逻辑处理,比如:收到某种类型的邮件怎么处理,收到某种内容的短信怎么处理. 邮件收到的时候,可以不删除,可以

如何搭建亿级社交信息分享平台?

由于移动互联网的兴起,人与人之间的交流.信息分享能够以电子信号的速度传递在各个终端设备之间,每个人也都能够成为一个信息发布平台和信息接收平台,像朋友圈.微博.Twitter等社交平台的出现,大大方便和丰富了人们的日常生活.人人分享.人人参与也必然要求社交平台能够具有大规模.高并发.低延时的能力.通过本文,我们来看看如何搭建一个能够承受亿级活跃用户的社交信息分享平台. 一个最基础的方案 我们先来定义一个社交平台的基础的功能: 用户能够发布自己的状态.心情.照片.小视频等信息 用户能够关注自己的朋友

php微信公众开发之获取周边酒店信息的方法_php技巧

本文实例讲述了php微信公众开发之获取周边酒店信息的方法.分享给大家供大家参考.具体分析如下: 关注微信公众之后发送回复地理位置信息,即可回复周边附近的酒店信息列表,下面我就来给各位介绍利用php是怎么实现这个功能,希望全子对大家有帮助.代码如下: 复制代码 代码如下: <?php  //将提交过来的信息接收 $signature = $_GET['signature'];  $timestamp = $_GET['timestamp'];  $nonce = $_GET['nonce'];  

致命漏洞将允许攻击者绕过苹果的OTR签名验证并窃取iCloud钥匙串信息

致命漏洞将允许攻击者绕过苹果的OTR签名验证并窃取iCloud钥匙串信息 背景内容 在分析iOS平台上与沙盒逃逸有关的攻击面时,我们在iCloud钥匙串同步功能的OTR实现中发现了一个严重的安全漏洞. iCloud钥匙串同步功能允许用户以一种安全的方式跨设备共享自己的密码.该协议与其他跨设备密码共享机制(例如谷歌Chrome的密码同步功能)相比,安全性有显著的提升,因为它所采用的端到端加密使用了设备绑定型(device-specific)密钥,而这种加密方式能够显著提升iCloud钥匙串同步机制

微信公众开发之获取周边酒店信息

效果图: 开发之获取周边酒店信息-虹桥开发区周边酒店"> 并且附加上代码:  代码如下 复制代码 <?php  //将提交过来的信息接收   $signature = $_GET['signature'];    $timestamp = $_GET['timestamp'];    $nonce = $_GET['nonce'];    $echostr = $_GET['echostr'];    $token = "yanjiadong";    //判断接

深入理解Android中的Handler异步通信机制_Android

一.问题:在Android启动后会在新进程里创建一个主线程,也叫UI线程(非线程安全)这个线程主要负责监听屏幕点击事件与界面绘制.当Application需要进行耗时操作如网络请求等,如直接在主线程进行容易发生ANR错误.所以会创建子线程来执行耗时任务,当子线程执行完毕需要通知UI线程并修改界面时,不可以直接在子线程修改UI,怎么办? 解决方法:Message Queue机制可以实现子线程与UI线程的通信. 该机制包括Handler.Message Queue.Looper.Handler可以把