`
cwjtojava
  • 浏览: 4334 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

android异步线程为什么有这个错呢!

阅读更多
Only the original thread that created a view hierarchy can touch its views!
出现这个问题的原因是:
原来android中相关的view和控件不是线程安全的,我们必须单独做处理。
所以建议大家用handler来处理这个问题。
Handler:
Handler的官方描述:
A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue
.Handler的使用场合:
1、 to schedule messages and runnables to be executed as some point in the future;
      安排messages和runnables在将来的某个时间点执行。
2、 to enqueue an action to be performed on a different thread than your own.
      将action入队以备在一个不同的线程中执行。即可以实现线程间通信。比如当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
通过Handler更新UI实例:
步骤:
1、创建Handler对象(此处创建于主线程中便于更新UI)。
2、构建Runnable对象,在Runnable中更新界面。
3、在子线程的run方法中向UI线程post,runnable对象来更新UI。

详细代码如下:
package djx.android;

import djx.downLoad.DownFiles;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class downLoadPractice extends Activity {
private Button button_submit=null;
private TextView textView=null;
private String content=null;
private Handler handler=null;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //创建属于主线程的handler
        handler=new Handler();
       
        button_submit=(Button)findViewById(R.id.button_submit);
        textView=(TextView)findViewById(R.id.textView);
        button_submit.setOnClickListener(new submitOnClieckListener());
    }
    //为按钮添加监听器
    class submitOnClieckListener implements OnClickListener{
@Override
public void onClick(View v) {
//本地机器部署为服务器,从本地下载a.txt文件内容在textView上显示
final DownFiles df=new DownFiles("http://192.168.75.1:8080/downLoadServer/a.txt");
textView.setText("正在加载......");
new Thread(){
public void run(){
content=df.downLoadFiles();
handler.post(runnableUi);
}
}.start();
}
   
    }

   // 构建Runnable对象,在runnable中更新界面
    Runnable   runnableUi=new  Runnable(){
@Override
public void run() {
//更新界面
textView.setText("the Content is:"+content);
}
   
    };
   
   
}
0
3
分享到:
评论

相关推荐

    Android多线程文件上传

    在Android应用开发中,文件上传是一项常见的任务,尤其是在处理大文件或者需要提高用户交互体验时,多线程技术显得尤为重要。本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程...

    Android多线程操作

    在Android应用开发中,多线程是一个至关重要的概念,它...通过分析提供的文件名,我们可以推测这个实例可能是关于如何在后台线程加载数据并在UI线程更新进度的一个教程,这对于理解和实践Android多线程开发非常有帮助。

    Android多线程分段下载源码

    这个"Android多线程分段下载源码"实例是一个很好的学习资源,它实现了文件的分块下载,并允许用户自定义线程数来控制下载速度和效率。下面我们将详细探讨这一技术。 首先,我们要理解什么是分段下载。传统的单线程...

    Android 多线程 异步加载网络图片 ThreadTest

    2. 采用handler+Thread模式实现多线程异步加载; 3. 引入线程池来管理多线程 4. 引入线程池,并引入内存缓存功能,并对外部调用封装了接口,简化调用过程 参考:...

    android多线程异步下载图片

    在Android开发中,多线程异步下载图片是一项常见的需求,尤其在开发涉及大量图片展示的应用时,如社交应用、电商应用等。这样的技术能够提高用户体验,避免UI卡顿,因为图片加载工作不会阻塞主线程。下面我们将深入...

    Android多线程下载

    1. **使用异步任务(AsyncTask)**:Android提供了AsyncTask类,适合执行耗时操作,但其线程池大小有限,适用于小规模的多线程下载。 2. **使用Handler和Looper**:创建一个后台线程,通过Handler与主线程通信,...

    Android开发中的多线程编程技术

    总结,这个资源包为Android开发者提供了全面的多线程编程知识,包括理论讲解、实战技巧以及辅助工具,是提升Android应用性能和响应性的重要参考资料。学习并掌握这些内容,将有助于开发者编写出更加高效、流畅的应用...

    android多线程下载

    在实际开发中,可以使用Android的`DownloadManager`类,这是一个系统服务,提供了多线程下载、断点续传和自动处理网络错误等功能。但如果你需要更细粒度的控制,如自定义进度显示或更复杂的逻辑,可能需要自己实现...

    Android异步线程下载图片

    params)`:这个方法在后台线程中运行,执行实际的耗时操作,如下载图片。 3. `onProgressUpdate(Progress... values)`:当在`doInBackground()`中更新进度时,可以通过`publishProgress()`调用来在UI线程中显示进度...

    Android多线程下载实现方案

    通过安装`demo.apk`,你可以直观地看到多线程下载的运行效果,同时也可以参考代码学习具体的实现方法,这对于理解和掌握Android多线程下载技术非常有帮助。 总结,Android多线程下载是提升用户体验的重要手段,通过...

    android多线程demo(很清晰很详细)

    通过分析这个详细的demo,学生们可以逐步了解并掌握多线程的相关概念和技术,为日后的Android开发打下坚实的基础。在实际编程过程中,结合具体需求选择合适的方法,既能保证应用的流畅性,也能提高代码的可维护性。

    android多线程断点下载

    本文将详细介绍如何在Android中实现多线程断点下载,以及如何封装一个易于使用的接口,使得即使是对Android不太熟悉的开发者也能快速上手。 首先,我们要理解什么是多线程下载。传统的单线程下载方式只有一个线程...

    Android多线程下载Demo

    首先,我们要理解为什么需要多线程下载。在单线程下载中,数据流从服务器到客户端是连续的,如果网络状况不佳或者文件体积过大,下载速度可能会非常慢。而多线程下载则是将大文件分割成多个小块,通过不同的网络连接...

    Android实现多线程下载

    这就是多线程下载的核心思想,通过创建多个子线程,每个线程负责下载文件的一部分,从而在后台高效地完成下载任务。 1. **线程池和ExecutorService**: Android开发者可以使用Java的`ExecutorService`来管理和调度...

    Android异步线程使用Demo

    通过这个"Android异步线程使用Demo",开发者可以学习到如何在Android中正确地使用AsyncTask来实现异步操作,避免主线程阻塞,提升用户体验。同时,理解AsyncTask的工作机制有助于在实际项目中更好地管理后台任务。

    android多线程下载图片例子

    为了解决这个问题,Android提供了多线程技术来实现异步加载图片,使得应用能够流畅运行。本示例将围绕"android多线程下载图片例子"这一主题,深入探讨Android中异步加载图片的机制,并结合"AndroidUploadImages"这一...

    android 多线程下载源代码

    综上所述,这个"android 多线程下载源代码"涵盖了Android并发编程、网络通信、文件操作等多个重要知识点,对于提升Android开发者处理大文件下载的能力非常有帮助。通过深入学习和实践,开发者可以更好地理解和掌握...

    Android多线程文件夹下载及断点续传

    在Android开发中,进行大文件下载时,为了提高效率并充分利用设备资源,通常会采用多线程下载技术。此外,为了提升用户体验,断点续传功能也显得尤为重要,尤其是在网络不稳定或者用户中断下载后,可以从上次停止的...

    android多线程后台下载

    android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序

    android——多线程

    标题"android——多线程"和描述"android——Handler与多线程应用范例"暗示我们将深入探讨如何在Android中使用Handler来管理多线程。 Android系统默认运行在一个单线程环境中,即主线程,也被称为UI线程。主线程主要...

Global site tag (gtag.js) - Google Analytics