精华内容
下载资源
问答
  • Android 线程更新UI

    2016-02-06 15:52:00
    1,讲解android线程知识 2,代码附注释, 3,已调试通过
  • Xamarin.AndroidUI线程更新UI
  • Android平台中多线程应用很广泛,在UI更新、游戏开发和耗时处理(网络通信等)等方面都需要多线程,下面是一个在线程中更新UI的代码
  • Android 线程是单线程的。 所以更新UI要用到Handler:private Handler splashHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case OVER:progressDialog.dismiss();break;...

    Android 线程是单线程的。 所以更新UI要用到Handler:

    private Handler splashHandler = new Handler() {

    public void handleMessage(Message msg) {

    switch (msg.what) {

    case OVER:

    progressDialog.dismiss();

    break;

    default:

    break;

    }

    super.handleMessage(msg);

    }

    };

    当一个线程运行完毕后可以发送通知给Hanler,通知主线程更新UI :

    new Thread() {public void run() {

    initList();

    Message m = splashHandler.obtainMessage(OVER);

    splashHandler.sendMessage(m);

    splashHandler.post(r);

    splashHandler.postDelayed(r, delayMillis);

    splashHandler.postAtTime(r, uptimeMillis);

    }}.start();

    也可以直接使用:

    splashHandler.post(new Runnable(){

    public void run() {

    progressDialog.dismiss();

    }

    });

    //splashHandler.postDelayed(r, delayMillis);

    //splashHandler.postAtTime(r, uptimeMillis);

    直接在Runnable 中更新UI,因为此时的 Runnable 是运行在UI所在的主线程中。

    展开全文
  • Android 线程 更新UI 操作UI
  • android后台线程更新UI

    千次阅读 2016-06-21 17:50:45
    Android中后台线程是无法直接更新UI程序的,这和Qt是一样的; 如果想要在线程更新UI,一般有一下几个方法: 方法一: 在主线程中,继承重新Handler类,重写handleMessage函数,接受通过myHandler对象发送的消息...

    Android中后台线程是无法直接更新UI程序的,这和Qt是一样的;


    如果想要在线程中更新UI,一般有一下几个方法:

    方法一:

    在主线程中,继承重新Handler类,重写handleMessage函数,接受通过myHandler对象发送的消息;

    Handler myHandler = new Handler() {  
              public void handleMessage(Message msg) {   
                   switch (msg.what) {   
                        case 1:   
                             UpdateUIFunction();  
                             break;   
                   }   
                   super.handleMessage(msg);   
              }   
         }; 

    或者

    通过java回调的方法构造Handler,获取消息;实质和上面的方法一样;

    Handler(Handler.Callback callback);




    方法二:

    通过 Handler的post(Runnable r)函数,直接主线程中调用UI函数:


    这个方法应用起来更简单一些;


    Handler m_handlerThread = new Handler();  //注意:Handler的示例声明还是要放到接收消息的类中实现; 一般就是主线程(UI线程);
    
    
    public class thread_count extends Thread
    {
    
        int nCount = 0;
    
        @Override
        public void run()
        {
            while (true)
            {
                m_handlerThread.post(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        textView.setText("thread UI:   " + nCount++ );
                    }
                } );
    
                try
                {
                    sleep(10);
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
    
            }
        }
    }
    
    @Override
    public void onClick(View v)
    {
        new thread_count().start();
    }
    
    
    
    
    方法二.1;
    如果想在工作线程中创建UI线程(主线程的Handler)那么需要:参数: Looper.getMainLooper())
    
    Handler handler = new Handler(Looper.getMainLooper());
    
    一般情况,new Handler不带参数的是获取当前线程的Looper; 更多信息可以百度;
    
    
     handler.post(new Runnable() {
        @Override
        public void run() {
            textview.show();
        }
    });




    方法三:更加简单一些:

    主要通过View的post函数; 具体和Handler的post区别可以查询;


    new Thread()
    {
        @Override
        public void run()
        {
            try
            {
                sleep(1000*10);
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
    
    
    
            mBluetoothAdapter.stopLeScan( LeScanCallback_fun );
    
            textview.post(new Runnable()
            {
                @Override
                public void run()
                {
                    textview.setText( "直接更新UI控件" );
                }
            });
    
    
        }
    }.start();

    展开全文
  • 本篇文章主要介绍了浅谈Android中使用异步线程更新UI视图的几种方法,具有一定的参考价值,有兴趣的可以了解一下
  • androidUI线程更新UI

    2019-06-07 14:34:03
    Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) Looper的方式。 使用Handler的方式。 // 1. 使用runOnUiThread的方式...runOnUiThread(new Runnable() { ... public voi...
    1. Activity.runOnUiThread(Runnable)
    2. View.post(Runnable)
    3. View.postDelayed(Runnable, long)
    4. Looper的方式。
    5. 使用Handler的方式。
    // 1. 使用runOnUiThread的方式
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
        }
    });
    
    // 2. 使用post的方式
    btn.post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
        }
    });
    
    // 3. 使用postDelayed的方式
    btn.postDelayed(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
        }
    }, 1000);
    
    // 4. 使用Looper的方式
    Looper.prepare();
    Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
    Looper.loop();
    
    // 5. 使用Handler的方式
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
                    break;
            }
    
        }
    };
    // 发送消息
    handler.sendEmptyMessage(1);
    或者
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
        }
    });

     

    展开全文
  • 使用HandlerThread获取Looper对象,后创建Handler(mHandlerThread.getLooper),此时的HandleMessage()在子线程中运行,为何此处可以更新UI?public class MainActivity extends AppCompatActivity {private TextView ...

    使用HandlerThread获取Looper对象,后创建Handler(mHandlerThread.getLooper),此时的HandleMessage()在子线程中运行,为何此处可以更新UI?

    public class MainActivity extends AppCompatActivity {

    private TextView mTvText ;

    private Handler mHandler;

    // 使用这个新线程获取Looper对象

    private HandlerThread mHandlerThread = new HandlerThread("my_handler_thread");

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mTvText = (TextView)findViewById(R.id.id_tv_text);

    mHandlerThread.start();

    mHandler = new Handler(mHandlerThread.getLooper()){

    @Override

    public void handleMessage(Message msg) {

    // 此处显示在子线程中执行 handleMessage()

    // 为何在此处(子线程中)更新UI组件不会抛出异常?

    Log.v("LOG","CurThread: "+Thread.currentThread());

    // CurThread:Thread[my_handler_thread,5,Main]

    mTvText.setText("update this textView!");

    }

    };

    mHandler.sendEmptyMessage(1);

    }

    }

    bVtpvD

    展开全文
  • 讲解Android线程UI更新,通过handler进行主线程UI的更新。
  • 安卓线程更新UI

    2019-07-09 09:37:42
    众所周知,安卓线程不能更新UI。那么,真的是这样吗? 当 App 第一次启动的时候,Android 会同时启动一个对应的主线程(Main Thread),这个主线程就是 UI 线程,也就是 ActivityThread。UI 线程主要负责处理与 UI ...
  • Android UI 线程更新UI也会崩溃???

    万次阅读 多人点赞 2020-04-19 22:48:19
    本文已经授权公众号「鸿洋」原创首发。 大家好,我是鸿洋。 上个周末是双休,我决定来...android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy ca...
  • 上一篇写到两种使用线程简单实用的方法,那么使用线程更新UI,只要使用得当还是可以的。虽然说更新UI需要主线程,请看下面解说:用线程更新UI。 下载地址:http://download.csdn.net/download/qq_16064871/8499931 ...
  • Android关于线程更新UI的方法   在一个Android 程序开始运行的时候,会单独启动一个Process。默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此...
  • Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面。
  • 开发Android程序时经常会用到后台线程请求服务器数据,当请求完数据后更新UI时,经常遇到回调函数中和UI相关的语句无法执行,甚至有时候会抛异常。 下面的例子我会讲到三种方法更新UI,例子非常简单,一个Activity和...
  • 我是刚学习安卓开发,小白一个,很多知识都不懂,查了一些资料才弄明白的,我想应该也有一些同学,刚开始...2.使用handler ui线程和子线程通讯更新ui示例 二、添加引用和权限 1.创建一个Activity to Mobile 为E...
  • Android更新UI线程

    2021-05-28 14:35:59
    在别的线程更新UI的方法 因为在AndroidUI只能在UI线程更新,在别的线程更新就会报错。 //处理UI需要在UI线程中处理 MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() {
  • 子线程不能更新UI已经是一个常识了,如果两个线程同时更新UI,可能对同一个控件操作造成混乱,而更新UI涉及到整棵View树的遍历,加锁又影响效率,索性在ViewRootIlmpl类中设置一个checkThread()方法,检测当前线程和...
  • Android在非UI线程更新UI的方法

    千次阅读 2014-07-16 09:43:14
    1、使用Thread+Handler实现非UI线程更新UI界面
  • 本篇文章是对Android中在其他线程更新UI线程的方法进行了详细的分析介绍,需要的朋友参考下
  • xamarin android异步更新UI线程

    万次阅读 2017-08-30 23:06:03
    UI线程简单了解 一些从事web开发的同学,可能对UI线程没有这个概念,没办法,毕竟“UI线程”这个概念只存在一些客户端(window客户端软件、app等)...其实android在子线程更新UI线程,一个方法就欧了,RunOnUiThread
  • Android 线程更新UI

    2015-09-14 14:59:10
    安卓线程更新UI的方法就是发消息到主线程 private Thread mThread; public void runThread() { mThread = new Thread(runnable); mThread.start();//线程启动 } Runnable runnable = new Runnable() { @...
  • AndroidUI线程更新UI runOnUiThread(new Runnable() { public void run() { onDown(null); } });
  • 第一种,使用Handler更新UI 第二种,利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中 xml文件 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint....
  • AndroidUI线程更新UI界面

    千次阅读 2017-11-27 20:12:32
    “好记性不如烂笔头”,明明刚用完不久的知识很容易又忘记了,感觉自己有必要通过博客把工作一年以来遇到的典型问题记录,就从Android工作线程更新UI界面引起的crash说起吧。 项目中的Gallery在显示照片详细信息中...
  • 主要介绍了android使用handler ui线程和子线程通讯更新ui的方法,大家参考使用吧
  • Android是支持多线程的。...而Android中又规定只有创建UI线程才能更新UI,即只有主线程才能更新UI。然后,我们又听说有什么方法可以子线程中也可以更新UI。  在子线程更新UI的方法有: 1)Activity类:pu

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,371
精华内容 48,948
关键字:

安卓线程更新ui