Android——子线程操作主线程

子线程不能直接操作主线程 UI线程
    //水平进度条
    public void jdt1_onclick(View view)
    {

        final ProgressDialog pd = new ProgressDialog(this);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMessage("正在加载请稍后");
        pd.show();

        //创建thread实例  实现Runable接口  启动多线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= pd.getMax(); i++) {
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {

                    }

                    pd.setProgress(i);
                }

                pd.dismiss();
            }
        }).start();

        //创建thread实例  重写run方法  启动多线程
        new Thread()
        {
            @Override
            public void run() {
                super.run();

                //新线程 子线程
                for (int i = 0; i <= pd.getMax(); i++) {
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {

                    }

                    pd.setProgress(i);
                  }

                 pd.dismiss();//关闭
                //子线程不能直接操作主线程 UI线程
                //1.可以用hander
                //2.也可以用runOnUiThread
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(UIActivity2.this, "加载完成", Toast.LENGTH_SHORT).show();
                    }
                });

            }

            }.start();

    }

				
时间: 2024-12-14 12:49:59

Android——子线程操作主线程的相关文章

在子线程中操作主线程

当android启动Activity时,会先启动一个主线程(也称为UI线程),用于控制Activity的当前View界面,在主线程控制的过程中,子线程是不能直接更新主线程数据的,但是android中提供了很多其他线程操作UI线程的方法 方法一:Activity.runOnUiThread( Runnable) 这是一个在子线程中设置主线程中TextView的实例: NeedVerify.this.runOnUiThread(new Runnable() { public void run() {

Java子线程中操作主线程Private级别数据

两个类分别如下: <pre name="code" class="java">package Demo2; import java.util.*; class Demo2 { private static ArrayList<String> a = new ArrayList<String>(); public static void main(String[] args) { a.add("String0")

C#如何操作另一个窗体:[2]子窗体操作主窗体(转)

首先我们新建一个项目   在项目管理器中,我们右击,选择"添加",选择"windows窗体"   输入窗体名,点击"确定"   我们给form1拖入按钮控件   在项目管理器中,我们找到"Form1.Designer.cs",双击打开代码窗口   我们找到按钮的定义,然后把private改为public   我们回到窗体1,把以下代码填入代码窗品中 Form2 a = new Form2(); a.Show(this); 这个

android子线程中更新UI的方法

在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 参考:Android子线程 方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //

Android子线程更新UI主线程方法之Handler

背景: 我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. 下面说下有关Handler相关的知识. 多线程一些基础知识回顾:在介绍Handler类相关知识之前,我们先看看在Java中是如何创建多线程的方法有两种:通过继承Thread类,重写Run方法来实现通过继承接口Runnable实现多线程 具体两者的区别与实现,看看这篇文章中的介绍:http://de

Android子线程真的不能更新UI么

Android单线程模型是这样描述的: Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行 如果在其它线程访问UI线程,Android提供了以下的方式: Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) Handler 为什么呢?在子线程中就不能操作UI么? 当一个程序第一次启动的时候,Android会同时启动一个对应的主线程,这个主线程就是UI线程,也

在C#中子线程如何操作主窗口线程上的控件

在C#中子线程怎样操作主线程中窗口上控件 在C#中,直接在子线程中对窗口上的控件操作是会出现异常,这是因为子线程和运行窗口的线程是不同的空间,因此想要在子线程来操作窗口上的控件.是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了Invoke的方法.其作用就是让子线程告诉窗口线程来完毕对应的控件操作. 要实现该功能,基本思路例如以下: 把想对还有一线程中的控件实施的操作放到一个函数中,然后使用delegate代理那个函数.而且在那个函数中加入一个推断,用 InvokeRequir

Android子线程访问网络

之所以Google在Android4.0之后,禁止主线程访问网络,是为了更好的用户体验.也就是主线程是为了界面的显示.如果主线程访问网络,就会造成"卡顿".也就是对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程就会出现假死的现象,产生很不好的用户体验.所以,默认的情况下如果直接在主线程中访问就报出了这个异常,名字是NetworkOnMainThreadException.主线程操作5s的相应时间,就会关闭该线程,所以将耗时很大的操作放在子线程

Android子线程刷新主线程中View

最近遇到一问题,ListView Item加载多个图片,图片是在Adapter的getView方法通过子线程异步进行加载的. 这时候就涉及到子线程刷新主线程中View的问题,一般有两个方式, 1.View.post(Runnable); 2.Activity.runOnUiThread(Runnable); 首次是使用View.post方式来刷新界面,但是一直刷新失败,debug发现图片下载已经成功,View.post方法也已经调用了,但是图片刷新一直没有成功. 很纳闷,于是加上log看了一下,