android重绘UI Only the original thread that created
   是这样的,我公司给第三方手游的SDK,里面提供了登录和注册的弹窗,

注册的时候发送验证码到手机后,通过发送Handler更改UI,实现倒计时效果。
然后还是出现这个问题了图片说明
如图所示:
我将所有的进程ID和进程名都打出来了结果View的生成和更改都是在主线程里面的结果还是出现问题了__

0

2个回答

所有的view都是属于viewrootimpl对象管理的,所以viewrootimpl对象在哪个线程,那么只有这个线程可以访问更新ui。viewrootimpl对象是在
调用windowmanage的addwindow的时候创建的,我们知道主线程是在setcontentview的时候会调用addwindow,所以多数情况下,主线程会有一个
viewrootimpl对象来管理主线程下的所有view。但是并不是只有主线程才有viewrootimpl,只有你在其它线程里调用了addwindow,那么其它线程也会
有viewrootimpl对象,该线程下的view也只有该线程可以更新,主线程是无法更新的。如果你确定,出问题的这个textview你是在主线程里更新的话,它
报这个错误就表面它不是主线程的view,是其它某个线程的,所以主线程里更新是会报错的。另外一点,你打的log看你用的是pid,不知道你打的是不是
进程id,如果是进程id的话,说明不了问题,要打线程id才能知道是不是主线程的。看不到代码,只能给这些分析。

1
stone_you
stone_you 回复sakura_bean: 有问题一起讨论学习
一年多之前 回复
sakura_bean
sakura_bean 有问题我能继续问你吗
一年多之前 回复
sakura_bean
sakura_bean 谢了,我去看看线程id
一年多之前 回复

检查下代码吧,感觉可能是在子线程操作了ui。另外上面的日志不也是打印出了报名,为啥后面要抹黑掉

0
sakura_bean
sakura_bean 回复一条特立独行的咸鱼: 总共3个log第一个是弹出Dialog的线程,最后一个就是改UI前打印的3个都是一样的
一年多之前 回复
qdlgjsj345
一条特立独行的咸鱼 回复sakura_bean: 没看出来是主线程
一年多之前 回复
sakura_bean
sakura_bean 线程名都打印出来了,不应该是子线程
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android重绘UI Only the original thread that created
是这样的,我公司给第三方手游的SDK,里面提供了登录和注册的弹窗,n注册的时候发送验证码到手机后,通过发送Handler更改UI,实现倒计时效果。n然后还是出现这个问题了![图片说明](https://img-ask.csdn.net/upload/201801/17/1516171915_379984.png)n如图所示:n我将所有的进程ID和进程名都打出来了结果View的生成和更改都是在主线程里面的结果还是出现问题了__
异常来袭:Only the original thread that created a view hierarchy can touch its views.
今天遇到这个异常:rn Only the original thread that created a view hierarchy can touch its views.rn网上查了下,用下面的方法来解决:rn ChatActivity .this.runOnUiThread(new Runnable() rn @Overridern public void run() rn // refresh ui 的操作代码 rn rn ); rnrn问题来了:我的原来的线程为:new ClientThread().start(); rnrn那么上面的一段代码要放在什么地方才对呢?rnrn我试了下面一种方法是不对的!rnChatActivity .this.runOnUiThread(new Runnable() rn @Overridern public void run() rn new ClientThread().start(); rn rn );rnrn
android UI重绘问题
今天研究了一下SwipeMenuListView源代码,其中里面的的滑动效果是在MotionEvent.ACTION_MOVE:这个case中相应的,其实有时在这个动作的时候不断地调用View.layout()方法,但是当时突然很疑惑,为什么没有调用invalidate();带着疑问在网上不断地搜索,终于发现原来是:对于触屏事件,android系统都会对UI界面进行重绘,因此不用我们进行手动调用刷
Only one Looper may be created per thread问题
我在ui线程创建一个handler和一个子线程,再在子线程建了一个handler,在子线程的handler里面去模拟一个耗时操作,但是运行时一直提示我 Only one Looper may be created per thread,我好像并没有在一个线程里面开两个handler啊,各位大侠可否帮我看一看。感激不敬rnrn这个是MainActivityrn[code=java]public class MainActivity extends Activity rnrn private Button caculateButton;rn private EditText input;rn private TextView output;rn private ProgressBar progressBar;rn private CaculateThread cacThread;rn private Handler mHandler;rnrn @Overridern protected void onCreate(Bundle savedInstanceState) rn super.onCreate(savedInstanceState);rn setContentView(R.layout.activity_main);rn caculateButton = (Button) findViewById(R.id.caculate);rn progressBar = (ProgressBar) findViewById(R.id.process);rn input = (EditText) findViewById(R.id.inputView);rn output = (TextView) findViewById(R.id.outputView);rn // 点击事件将得到数传给子线程去进行计算rn caculateButton.setOnClickListener(new OnClickListener() rn @Overridern public void onClick(View v) rn int num = Integer.parseInt(input.getText().toString());rn Message msg = new Message();rn msg.what = 0x123;rn Bundle data = new Bundle();rn data.putInt("num", num);rn progressBar.setMax(num);rn progressBar.setMax(0);rn progressBar.setProgress(0);rn cacThread.getHandler().sendMessage(msg);rn rn );rn // 当前线程来接收计算线程计算的结果rn mHandler = new Handler() rn @Overridern public void handleMessage(Message msg) rn if (msg.what == 0x321) rn List nums = new ArrayList();rn nums = (List) msg.getData()rn .getSerializable("nums");rn output.setText(nums.toString());rn else if (msg.what == 0x111) rn int total = msg.getData().getInt("total");rn int current = msg.getData().getInt("current");rn progressBar.setMax(total);rn progressBar.setProgress(current);rn rn rn ;rn cacThread = new CaculateThread(mHandler);rn cacThread.run();rn rn rn[/code]rn这个是线程rn[code=java]public class CaculateThread extends Thread rnrn private CaculateHandler handler;rn private Handler parentHandler;rnrn public CaculateThread(Handler handler) rn // 获取父线程rn parentHandler = handler;rn rn rnrn @Overridern public void run() rn Looper.prepare();rn this.handler = new CaculateHandler(parentHandler);rn Looper.loop();rn rnrn public CaculateHandler getHandler() rn return handler;rn rnrn public void setHandler(CaculateHandler handler) rn this.handler = handler;rn rn[/code]rn耗时操作的handlerrn[code=java]public class CaculateHandler extends Handler rnrn private Handler parentHandler;rn private int total = 0;rn private int current = 0;rnrn public CaculateHandler(Handler handler) rn parentHandler = handler;rn rnrn @Overridern public void handleMessage(Message msg) rn if (msg.what == 0x123) rn int num = msg.getData().getInt("num");rn total = num;rn List nums = new ArrayList();rn for (int j = 3;; j = j + 2) rn int k = 2;rn for (; k < j; k++) rn if (j % k == 0) rn break;rn rn rn // 为质数rn if (j == k) rn nums.add(j);rn current = nums.size();rn rn Message procMsg = new Message();rn procMsg.what = 0x111;rn Bundle data = new Bundle();rn data.putInt("total", total);rn data.putInt("current", current);rn procMsg.setData(data);rn // 将消息传给ui线程rn parentHandler.sendMessage(procMsg);rn rn // 如果达到需要的数量,将质数发送出去rn if (nums.size() >= num) rn Message outMsg = new Message();rn outMsg.what = 0x321;rn Bundle data = new Bundle();rn data.putSerializable("nums", (Serializable) nums);rn outMsg.setData(data);rn // 将消息传给ui线程rn parentHandler.sendMessage(outMsg);rn rn rn rn rn rnrn[/code]
android 报错Only the original thread.... can touch its views.
android 报错为: Only the original thread that created a view hierarchy can touch its views.rn求各位大神给指点指点,谢谢rn源码为:rnrnpublic class MainActivity extends Activity rn rn private Thread newThread; //声明一个子线程 rn private TextView sh;rn rn rn @Overridern protected void onCreate(Bundle savedInstanceState) rn super.onCreate(savedInstanceState);rn setContentView(R.layout.activity_main);rn rn rn sh = (TextView) findViewById(R.id.show); rn newThread = new Thread(new Runnable() rn public void run() rn try rn Response res = Jsoup.connect("http://www.baidu.com").timeout(5000).execute();rn System.out.println(res.body());rn sh.setText(res.body());rn rn catch (IOException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn ); rn newThread.start(); rn rnrn
worker thread和UI thread的问题
这两者区别是什么 ?如何创建UI thread?
Android Thread线程动态操作UI的Demo
上传这个主要是因为我没分儿了哈哈.. 我也是刚开始学习安卓开发,希望这个可以帮到有类似需求的朋友
Android Thread子线程和主线程的UI交互
我们知道更新UI只能在主线程中,但是在日常应用中我们除了使用封装好的AsyncTask外大多会使用Thread+Handler的手法来实现子线程从网络获取数据,然后再修改主线程上的View视图,现在我们可以使用下面5种方法来实现线程间的UI交互. 1,认识Activity.runOnUiThread(Runnable)先上代码 public class MyActivity extends A
android 线程 thread 实现子线程更新UI
线程实现的两种方式:runnable ,或者 thread runnable :http://blog.csdn.net/wjtianwang/article/details/48438227 在这里直接贴代码:主要实现线程每过一秒UI上数字加一 code: package com.example.thread; import android.app.Activi
android Thread更新Ui操作简单介绍
用法很简单就是在线程中处理耗时操作,通过handler在主线程更新UI界面private static final int UPDATE_ADAPTER_DATA = 0;下面是更新界面地方(发送Message)Message message = new Message(); message.what = UPDATE_ADAPTER_DATA; handler.s...
original 教程
这是一款统计软件,适合搞统计和复杂网络的人员使用
original使用指南
original的一些基本使用指南,主要介绍如何用这个软件处理数据,画出表格之类
C#制作UI重绘问题
为什么我写的界面,我用IE挡住他后,再最小化IE,我写的软件UI都要刷新一次呢?
Android Thread
在android jni 下创建pthread
android thread
android thread application
关于一个UI thread的问题
现在做一系统,要求从一被测板中不断采集数据并动态显示,rn实时要求比较高。而数据显示这个模块我希望有独立的菜单以及rn提供给用户的接口。我想把数据显示这个模块做为一用户界面线程,rn主线程控制被测板工作并采集数据。rn这有些类似MATLAB的绘图命令,执行这个命令时就产生一个rn用于绘图的顶层窗口。rn大家给点意见~~谢谢`~
original tool
用于论文中的作图,可以直接把txt里面的数据直接导入 然后出图
IOS真机切换UI界面时,出现“Only run on the main thread” 的解决方法
[[[YXGSDK sharedInstance] GetViewController] presentViewController:ForgotPasswdV2 animated:NO completion:nil]; 真机环境下,UI的处理必须是单线程的,所以当 在一个已存在的UI上切换新的UI时,会出现Only run on the main thread 错误。告诉你,只
Android中常用的handler进行UI更新和Thread代码
一. android的UI交互更新代码 1.最简单的handler方式:Handler handler = new Handler(); //简单方式 handler.post(new Runnable() { public void run() { System.out.println("update UI"); } }); //采用延迟更新的方式 handler.pos
android APP 的work thread怎么不能更新UI的问题求解
java中的异步线程回调方法实现 这个问题一直环绕在我的脑海里,android APP 的work thread怎么不能更新UI 一.实现workthread 调用远程方法 二.实现远程方法执行完后调用回调方法 三.判断回调方法是否执行在workthread 四.android异步线程更新UI的方式总结 五.后台服务怎么跟前台UI解耦 /** ...
qt 多线程报错Widgets must be created in the GUI thread
我在QMainWindow主窗口中创建了一个线程类mythread:QThread和一个子窗口,在run函数里监控时间,时间一到,emit信号到主窗口,显示子窗口,调试发现在主线程中,能接收到信号,但是当执行子窗口的show操作的时候,系统弹出runtimeerror错误并终止程序,Application output中显示ASSERT failure in QWidget: "Widgets must be created in the GUI thread.",请问如果我想实现这个功能,我应该怎么修改。
Android视图状态及重绘流程
当手指按在视图上的时候,视图的状态就已经发生了变化,此时视图的pressed状态是true.每当视图状态有发生翻遍的时候,就会回调View的drawableStateChanged()方法。 protected void drawableStateChanged() { Drawable d = mBGDrawable; if (d != null && d.isStatef
Android视图重绘
学习自http://blog.csdn.net/guolin_blog/article/details/170451575大状态enabled视图如果不可用:1.onTouch得不到执行2.onClick得不到执行3.重写的onTouchEvent依然可以得到执行(这3点可以从事件分发的源码中得到结论)focusedrequestFocus在view不支持focused无效,不可见无效;view的...
android,view的重绘
mars数独制作视频,页面重绘的时候出现了问题,“Unfortunately,shudu08 has stopped.”感觉是某个xml文件没有配置好,求高手帮助纠正错误,顺便告诉下android运行的基本流程。我是纯小白,高手勿喷 进入界面: 点击空白处: 报错: 代码如下: Game.java package com.liuyuan.shudu08; public class
android 视图重绘
view 的invalidate()--->view 的onDraw; requestLayout()--->Viewgroup onLayout(),及其子view的layout(如果是viewgroup,layout()会引发onLayout()); onMeasure()--->layout()--->onLayout();
android 画图(循环,重绘)
我想实现以下功能:从屏幕左侧开始,沿着水平方向不停画图,画到最右侧以后,清屏。继续从左侧画图,如此循环。rn现在遇到了问题,清屏不能清干净。现在程序会有三根线同时存在。前两根是原来画的,第三根是正在画的。我想要的结果是只保存正在画的这根。代码如下:rnrnjava代码:rnrnpackage com.example.testdraw;rnrnimport java.util.Timer;rnimport java.util.TimerTask;rnrnimport android.app.Activity;rnimport android.graphics.Bitmap;rnimport android.graphics.Canvas;rnimport android.graphics.Color;rnimport android.graphics.Paint;rnimport android.graphics.PorterDuff.Mode;rnimport android.graphics.PorterDuffXfermode;rnimport android.os.Bundle;rnimport android.view.Menu;rnimport android.view.SurfaceHolder;rnimport android.view.SurfaceView;rnimport android.view.View;rnimport android.view.View.OnClickListener;rnimport android.widget.Button;rnrnpublic class MainActivity extends Activity rn private SurfaceView surfaceview;rn private SurfaceHolder surfaceholder; rn private Button btnStart;rn Timer mTime;rn TimerTask mTimerTask;rn int oldX=0,oldY=0,newX=0,newY=3;rn int flag1=0,flag2=0;//flag1代表水平画0和垂直画1;flag2表示往右下画0和往右上画1rn int count=0;rn Canvas canvas;rn Paint paint;rn Bitmap bitmap;rn @Overridern protected void onCreate(Bundle savedInstanceState) rn super.onCreate(savedInstanceState);rn setContentView(R.layout.activity_main);rn surfaceview=(SurfaceView)findViewById(R.id.surfaceview);rn surfaceholder=surfaceview.getHolder();rn btnStart=(Button)findViewById(R.id.btnStart);rn rn paint=new Paint();rn btnStart.setOnClickListener(new OnClickListener() rn rn @Overridern public void onClick(View arg0) rn // TODO Auto-generated method stubrn mTime=new Timer();rn mTimerTask=new TimerTask() rn rn @Overridern public void run() rn // TODO Auto-generated method stubrn if(newX>getWindowManager().getDefaultDisplay().getWidth())rn //清屏 rn ClearDraw();rn rn rn draw(oldX, oldY, newX, newY);rn oldX=newX;rn oldY=newY;rn if(flag1==0)rn flag1=1;rn if(flag2==0)rn newX=oldX+3;rn newY=oldY;rn elsern newX=oldX+3;rn newY=oldY;rn rn rn else if(flag1==1)rn flag1=0;rn if(flag2==0)rn newX=oldX;rn newY=oldY+3;rn elsern newX=oldX;rn newY=oldY-3;rn rn rn count++;rn if(newY>200)rn flag2=1;rn rn if(newY<=0)rn flag2=0;rn rn rn rn rn ;rn mTime.schedule(mTimerTask, 0,1);rn rn );rn rn rn public void draw(int oldX,int oldY,int newX,int newY)rn canvas = surfaceholder rn .lockCanvas();// 关键:获取画布 rn //bitmap=Bitmap.createBitmap(1000,1000,Config.ARGB_8888 );rn //canvas.setBitmap(bitmap);rn //Paint mPaint = new Paint(); rn rn paint.setAntiAlias(true); rn paint.setColor(Color.GREEN);// 画笔为绿色 rn paint.setStrokeWidth(2);// 设置画笔粗细 rn rn canvas.drawLine(oldX, oldY, newX, newY, paint);rn //surfaceholder.unlockCanvasAndPost(canvas);rn //canvas=surfaceholder.lockCanvas(new Rect(300, 0, 600,getWindowManager().getDefaultDisplay().getHeight()));// 关键:获取画布 rn //canvas.drawLine(300, 200,500, 400, mPaint);rn surfaceholder.unlockCanvasAndPost(canvas);rn rn @Overridern public boolean onCreateOptionsMenu(Menu menu) rn // Inflate the menu; this adds items to the action bar if it is present.rn getMenuInflater().inflate(R.menu.main, menu);rn return true;rn rnrn // TODO Auto-generated constructor stubrn public void ClearDraw()rn Canvas canvas = surfaceholder.lockCanvas(); rn //canvas.drawColor(Color.TRANSPARENT); rn Paint p = new Paint(); rn //清屏 rn p.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); rn canvas.drawPaint(p); rn p.setXfermode(new PorterDuffXfermode(Mode.SRC)); rn oldX=0;rn newX=3;rn surfaceholder.unlockCanvasAndPost(canvas); rnrn rnrnrn配置文件:rn rn rn rn rn rnrn rn
thread thread thread thread
thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread
关于Work Thread和UI Thread传递内存的问题。
问题描述如下:Work Thread new出一块内存,通过PostMessage到UI Thread中,由于某种原因,UI Thread需要使用GlobalAlloc来分配内存空间,然后将new出来的内存拷贝到这块内存上,通过IPicture和IStream将其显示。个人感觉这样比较烦琐,有比较好的思路么?
Android 刷新、重绘 画布
Android 刷新、重绘 画布 吐槽 在自定义View中,如果你需要重绘画布达到动态的效果,你的第一个想法是在onDraw方法中把canvas画布对象拿出来,可是你会发现,拿出来的对象是Null,不管你怎么赋值都没用,这可能也是你找到这帖子的原因。 正题 如果需要动态的更换画布,首先你需要将里面的数据写到随时能调用的地方,比如说全局变量。 重写 invalidate方法 ...
android如何实现重绘
RT
C++PrimerPlus 6th English Original
C++PrimerPlus 6th English Original 第六版 英文原著
《菊与刀》original 的阅读
0. 词汇 foe:敌人,反对者,危害物; rigid:严格的,僵硬的,死板的, they are incomparably rigid in their behavior, innovation:革新; conscience:道德心;良心; invasion:入侵; perpetual marital law:永远履行军事管制; 1. 短语 al...
javax.servlet.ServletException: Original response not availabl异常:javax.servlet.ServletException: Original response not available
在weblogic下部署的应用,在未改动程序的情况下,突然就开始一直报javax.servlet.ServletException: Original response not available异常.rnrn <[ServletContext(id=32787110,name=bbs,context-path=/bbs)] Servlet failed with ServletExceptionrnjavax.servlet.ServletException: Original response not availablern at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:121)rn at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)rn at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)rn at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)rn at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)rn at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)rn at javax.servlet.http.HttpServlet.doHead(HttpServlet.java:313)rn at javax.servlet.http.HttpServlet.service(HttpServlet.java:757)rn at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)rn at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)rn at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)rn at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)rn at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)rn at net.lybbs.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:170)rn at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)rn at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7053)rn at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)rn at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)rn at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)rn at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)rn at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)rn at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)rnrnrnnet.lybbs.filter.SetCharacterEncodingFilter.doFilter是第三方插件rn希望高手能帮忙找出问题出处.也帮助找到解决办法.在此谢谢!rn
查看IE的cookies (original)
查看IE的cookies工具_original
Original Brodatz资源
Original Brodatz是一个包含有112张图片的数据集,常用来作为纹理提取图片;为扩大数据集们可以对图片进行分割等操作
WinNT4.0 English Original
winNT Server V4.0 SP3 之 i386 目录 的压缩文件 今日使用过 无误
android ui
有没有android ui绘制的一些书rn要详细一点的,可以对相关类进行详细讲解的
android UI
这是一个android UI的例子,值得参考
android native c++ thread
NULL 博文链接:https://ouyangfeng521.iteye.com/blog/1725708
Android Thread使用注意事项
通过继承android::Thread,可以轻松定义一个自己想要的线程。 例如: class MyThread : public android::Thread { public: virtual bool threadLoop(); //重写threadLoop方法 }; 问题关键我应该怎么实例化呢? 1、栈上定义,MyThread instance(); 2、堆上定义...