代码改变世界 Android线程中使用Toast.dialog.loading Loading: Thread t1 = new Thread(new Runnable() { @Override public void run() { Looper.prepare(); LoadingUnit.showLoading(context); if (!result.isEmpty()) { JSONObject paramJson = JSON.parseObject(result); Strin…
1. 子线程的Toast怎么显示不出来? 因为Toast在创建的时候会依赖于一个Handler,并且一个Handler是需要有一个Looper才能够创建,而普通的线程是不会自动去创建一个Looper对象,比如说在某个Activity中能new一个Handler是因为Android系统在启动一个Activity的时候会默认的创建一个Looper对象. 因此为了能够在子线程中显示Toast,你可以在开启的子线程中执行Looper.prepare()来构建一个Looper,然后在显示Toast,但是不…
在子线程中使用Toast的时候,出现Force close. 错误提示:Can't create handler inside thread that has not called Looper.prepare() 解决方法: Looper.prepare(); Toast.makeText(ActivityTestActivity.this, "toast", 1).show(); Looper.loop(); 原因: 子线程只是一个普通的线程,其ThreadLoacl中没有设置过L…
       自定义的Toast类 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="10dp" android…
因为没一个Looper处理消息循环,所以子线程中无法使用Toast 方法: Looper.prepare(); Toast.makeText(getActivity(),"刷到底啦",Toast.LENGTH_SHORT).show(); Looper.loop(); 在子线程中更新UI 第一种: new Handler(context.getMainLooper()).post(new Runnable() { @Override public void run() { // 在这里…
Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,从消息队列里取消息,处理消息. 注:写在Looper.loop()之后的代码不会被立即执行,当调用后mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行.Looper对象通过MessageQueue来存放消息和事件.一…
import Vue from 'vue' import { ToastPlugin, AlertPlugin, ConfirmPlugin, LoadingPlugin } from 'vux' /*import { Promise } from 'es6-promise';*/   Vue.use(ToastPlugin) Vue.use(AlertPlugin) Vue.use(ConfirmPlugin) Vue.use(LoadingPlugin)   const Message =…
在Android中经常出现多线程中设置控件的值报错的情况,今天教大家封装一个简单的类避免这样的问题,同样也调用实现也非常的方便. 自定义类: /** * Created by wade on 2016/5/3. * <p/> * 自定义多线程中设置控件的值 */ public abstract class RunThread { private Handler handler = new Handler() { @Override public void handleMessage(Messa…
一般我们都把Toast当做一个UI控件在主线程显示.但是有时候非想在子线程中显示Toast,就会使用Handler切换到主线程显示. 但是子线程中真的不能直接显示Toast吗? 答案是:当然可以. 那应该怎么操作呢?在当前线程中先初始化一个Looper即可! Looper.prepare(); Toast.makeText(getBaseContext(), "text", Toast.LENGTH_LONG).show(); Looper.loop(); 为什么在子线程中使用Toas…
转:http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html 在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处理,然后更新用户界面显示.但是,在主线线程之外的线程中直接更新页面显示的问题是:系统会报这个异常: ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original…
今天在做练习时,在一个新开启的线程中调用“Toast.makeText(MainActivity.this, "登陆成功",Toast.LENGTH_SHORT).show();” 报错为:Can't create handler inside thread that has not called Looper.prepare() 在新线程中添加Looper.prepare();和Looper.loop();即可. 示例代码段:(该代码在新开的线程中) Looper.prepare()…
当在非UI线程中更新UI(程序界面)时会出现例如以下图所看到的的异常: 那怎样才干在非UI线程中更细UI呢? 方法有非常多种.在这里主要介绍三种: 第一种:调用主线程mHandler的post(Runnable r)方法. 该方法中的Runnable对象会被会加入到mHandler所在线程的Message消息队列中,假设mHandler在主线程中则Runnable 对象中的run方法将会在主线程中运行.所以能够达到更新UI线程的目的. 提示: Handler另一个与之类似的方法postDelay…
因为工作需求,所以自己研究了自定义Toast,这里做出总结: 在此之前有一点需要提前说明:Toast与其他组件一样,都属于UI界面中的内容,因此在子线程中无法使用Toast弹出提示内容,如果强行在子线程中增加会导致错误.本例子使用异步任务来说明,原理跟子线程一样. 主界面: 自定义Toast弹出的样式: MainActivity: public class MainActivity extends AppCompatActivity implements View.OnClickListener…
Handler 的使用在 android App 开发中用的颇多,它的作用也很大,使用 Handler 一般也会使用到多线程,相信大家对 Handler 不会陌生,在这里,重点说一下 android 组件之一 Service 与 TaskTimer 结合 Handler 使用,共享之! 阅读这篇博客,需要你知道的知识: <1> 知道在 Activity 中如何启动.停止 Service 以及 Service 的生命周期. <2> 使用过 TimerTask 的Api,不过这个不难,…
android 的service和activity是执行在UI主线程的. 在android线程中,仅仅有主线程即UI线程有自己的默认的消息队列.子线程须要创建自己的消息队列.并把消息发给队列,并循环起来,发给handler处理. 1.Looper.prepare();给子线程创建消息队列. 2.Looper.loop();把消息放入消息队列并循环起来. 例如以下是一个通过activity的oncreate()方法启动服务,在服务里开启子线程,并发消息给主线程来处理的DEMO. 3.MainAct…
优化项目过程中发现了一个非常Low的问题,整理一下.备忘: 说问题之前先看下HandlerThread的定义 一个封装了looper的线程:   Looper用于封装了android线程中的消息循环.默认情况下一个线程是不存在消息循环(message loop)的,须要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用.从消息队列里取消息.处理消息. 注:写在Looper.loop()之后的代码不会被马上执行.当调用后mHandler.…
今天想在TimerTask的run函数中调用Toast显示一下提示信息,却总是导致程序崩溃.可是try语句块却又无法捕获到异常,代码如下: ...... Timer timer = new Timer(); TimerTask sampleTask = null; ...... if (sampleTask==null){ sampleTask = new TimerTask() { @Override public void run() { Toast.makeText(getApplicat…
http://www.jb51.net/article/83319.htm   这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继承Dialog类来制作自己的对话框,需要的朋友可以参考下   自定义dialog基础版很多时候,我们在使用android sdk提供的alerdialog的时候,会因为你的系统的不同而产生不同的效果,就好比如你刷的是MIUI的系统,弹出框都会在顶部显示!这里简单的介绍自定义弹出框的应用. 首先创建布…
MainActivity如下: package cn.testlooper; import android.app.Activity; import android.os.Bundle; import android.os.Looper; import android.widget.TextView; import android.widget.Toast; /** * Demo描述: * 在子线程中Looper的使用 * * 测试结果: * 可在子线程中更改UI * * 原理备注: * 在Vi…
1. 表象     Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失. 2. 原因     Toast要求运行在UI主线程中.     Service运行在主线程中,因此Toast是正常的.     IntentService运行在独立的线程中,因此Toast不正常. 3. 在IntentService中显示Toast     利用Handler,将显示Toast的工作,放在…
发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方: 1,比如在子线程构造方法里面进行实现总线的注册操作: 2,要想子线程中接收消息的功能执行,必须启动线程. 3,添加tag和不添加tag类似其他. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.util.List; import org.simple.eventbus.EventBus; import…
前言 Toast,这个曾经也是现在正在迷倒万千软件开发者尤其是android开发者的小美女,向来不乏在各个明星应用中频繁登场.Toast是神马~听说是一种吐司面包,能吃吗?如果手机屏幕是巧克力做的,我觉得兴许味道还不错的说.言归正传,先来说一说Toast的应用场景,毕竟Toast哥也是见过大场面的人儿了.张三正打算拿在移动互联网上冲一个浪,突然Toast一个:“网络不给力啊,我都拿不到数据了”:李四要安装应用到内存卡,这时Toast一个:“你穷的连内存卡都买不起呀,我都找不着地儿安装了”:王五玩…
问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要改动 ui 仅仅能 post 到主线程或者使用 handler 之类.可是细致看看exception的描写叙述并非这种."Only the original thread that created a view hierarchy can touch its views".仅仅有创建该 v…
0. 前言 今天给大家带来一篇简单易懂的关于Android提醒小功能的文章.Dialog和Toast我们都不陌生,而Snackbar是Design Support库中提供的新控件,有些朋友可能还不了解.但是你真的知道什么时候应该使用Dialog,什么时候应该使用Toast,什么时候应该使用Snackbar吗?本篇文章中我们就来学习一下这三者使用的时机,另外还会介绍一些额外的技巧.本文转载自郭大侠的博客. 1.  Dialog 首先来介绍一下Dialog的用法吧,其实很简单,相信大多数人都是经常使…
不管是android ,还是 ios ,请不要在子线程中操作UI,有时有些崩溃,从报错上看不出什么原因,就有可能是子线程操作了UI:切记,切记! 请放在主线程例: activity.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(mContext,"未能正常打开蓝牙设备,请退出重进",Toast.LENGTH_LONG).show(); } });…
Android中我们常用的post()方法大致有两种情况: 1.如果post方法是handler的,则Runnable执行在handler依附线程中,可能是主线程,也可能是其他线程 2.如果post方法是View的,则一定是运行在主线程中的,因为所有view都自带一个handler,所有handler都有post方法,所以它的Runnable是运行在主线程中的 例如:Imageview自带一个handler,它有postDelayed方法,由于imageview是主线程上的,所以Runable是…
转自第一行代码-Android Android是不允许在子线程中进行UI操作的.在子线程中去执行耗时操作,然后根据任务的执行结果来更新相应的UI控件,需要用到Android提供的异步消息处理机制. 代码如下: public class MainActivity extends Activity implements OnClickListener { private static final int UPDATE_TEXT=1; private TextView textView; privat…
大体上想实现一个思路: 对一个view 的内容进行不停地变化, 通过按钮停止这种变化,以达到随机选择的目的. 开发过程中 使用textview 模拟,  建立线程 mythread = new Thread() { @Override public void run() { while(isrun) { 改变textview } } } 结果遭遇报错 Only the original thread that created a view hierarchy can touch its view…
原文网址:http://www.mobiletrain.org/lecture/doc/android/2011-05/457.html 大家都用过ddm,如果你用ddms查看一个程序的所有线程,你会发现Signal CatcherHeap Workermain threadbinder thread #1binder thread #2那这些线程都是用来做什么的呢?我来给大家介绍一下android中的线程 在Android系统中,Java层和c++/c层都可以创建线程.不过Java层创建的线程…
其实我们要牢记的是,对数据流的操作都是阻塞的,在一般情况下,我们是不需要考虑这个问题的,但是在Android 实现联网的时候,我们必须考虑到这个问题.比如:从网络上下载一张图片: Java代码: public Bitmap returnBitmap(String url) { URL myFileUrl = null; Bitmap bitmap = null; try{ myFileUrl = new URL(url); }catch(MalformedURLException e){ e.p…