线程的实现类如下
class UpdateStatus extends Thread {
@Override
public void run() {
super.run();
while (true) {
if (i == GlobalValues.AUIO_LENGTH || MODE != TIME) {
MODE = 0;
updateStatus.stop();
updateStatus = null;
break;
}
Message m = new Message();
m.what = VoiceForm.TIME;
VoiceForm.this.handler.sendMessage(m);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在android的oncreate()方法中添加如下代码
handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case VoiceForm.TIME:
i++;
myTextView1.setText("正在录音:" + i + "秒");
break;
}
super.handleMessage(msg);
}
};
然后在需要用到线程的地方,启动线程就行了
这样做是因为android只能在它自己开的主线程中进行ui操作,用户开启的线程通过Message对象告知handler进行如何操作,相当于用户开启的线程只是起到一个通知作用,在handler的实现类中通过switch与case可实现用户的多种操作
分享到:
相关推荐
在Android开发中,`TextView` 是一个非常常用的组件,用于显示单行或多行文本。然而,当文本包含HTML格式时,`TextView` 默认是不支持HTML解析和渲染的。为了在`TextView` 中显示带有HTML标签和图片的内容,我们需要...
在Android开发中,更新UI(用户界面)是一个常见的任务,但是由于Android的主线程(也称为UI线程)是负责处理用户交互和绘制界面的,所以直接在后台线程进行UI更新可能会导致程序崩溃或者界面卡顿。为了解决这个问题...
本篇将详细讲解如何在Android中使用AsyncTask实现多线程计数,并展示如何将计数结果显示到UI。 首先,我们需要理解Android的线程模型。Android应用的主要工作线程是主线程,也称为UI线程。这个线程负责绘制和交互UI...
这意味着,如果你在子线程中尝试修改任何UI元素,如文本、图片或者布局,系统会抛出`android.os.NetworkOnMainThreadException`异常,提示你在子线程中进行了网络操作或者UI更新。因此,要在子线程中更新主线程的...
在Android开发中,TextView是一个非常基础且重要的组件,它用于显示单行或多行文本,能够进行文字格式化、样式设置以及交互操作。在Android 2.2版本中,TextView提供了丰富的功能来帮助开发者构建用户界面。这篇API...
在这个过程中,我们使用了Handler来处理UI线程的消息,以确保在倒计时过程中更新TextView的内容不会导致ANR(Application Not Responding)错误。同时,通过`removeCallbacks`方法,我们在开始新的倒计时前取消了...
android里同时显示多个gif的关键代码,调用时使用setSpannableText( textView,content,textId)代替setText(content)就行了。改进版本,不需要在为没一个gif表情开一个新线程来维护了
- `Params`:在执行`AsyncTask`时需要传入的参数,可用于在后台服务中使用。 - `Progress`:如果需要在界面上显示当前的进度,使用这里的泛型作为进度单位。 - `Result`:任务执行完毕后,对结果进行返回。 `...
以上就是使用OkHttp在Android中进行网络请求并显示到TextView的基本步骤。通过实践,你将更深入地理解OkHttp的工作原理和用法,提升你的应用程序的网络性能。在实际开发中,还可以结合Retrofit等库进一步简化网络...
由于Android系统的安全机制,所有与UI相关的操作必须在主线程中执行,因此我们不能在子线程中直接修改UI组件,否则会引发“CalledFromWrongThreadException”。 2. Handler(处理者): Handler是Android中用于在...
- **消息队列配置**:在子线程中使用Handler时,需要首先调用`Looper.prepare()`来初始化该线程的Looper和消息队列,然后再创建Handler对象。 - **启动消息循环**:调用`Looper.loop()`方法可以使子线程进入消息循环...
在Android开发中,`Toast`是一种轻量级的提示方式,用于向用户显示短暂的信息,如操作结果或者简单的提示。通常,`Toast`会显示一个简单的文本消息,但默认样式可能无法满足所有设计需求。本篇文章将深入探讨如何在...
由于Android不允许直接在非UI线程中修改UI组件的状态,因此需要通过特定的方法间接地完成这一操作。一个常用的方法就是利用`Handler`。 **1. Handler机制** - **Message**: `Message`对象用于封装需要传递的数据。...
随着移动设备性能的不断提升与应用程序功能需求的日益复杂,多线程编程成为了Android开发中的一个重要环节。Android系统内部使用了多种框架来封装底层操作系统(如Linux内核)的功能,使得开发者能够更加高效地进行...
Android 多线程网络聊天室通信 Android 多线程网络聊天室通信是指使用多线程技术在 Android 平台上实现...在 Android 客户端程序中,使用多线程技术可以实现网络聊天室通信,并且可以提高程序的响应速度和用户体验。
Android中的Handler机制是Android应用开发中的核心组件之一,它与多线程、消息队列紧密相连,用于实现线程间的通信和任务的调度。Handler允许您将任务发送到特定的线程的队列中执行。一个典型的使用场景是在非UI线程...
本篇文章将详细讲解如何在Android中实现一个简易的倒计时功能,以及如何在子线程中安全地更新UI线程。 首先,我们需要了解Android的多线程机制。Android UI操作必须在主线程(UI线程)中执行,否则会抛出`android....
本篇文章将深入探讨如何在Android应用程序中有效地使用CursorAdapter,以及涉及的核心方法newView()和bindView()。 首先,CursorAdapter是BaseAdapter的一个子类,它的主要作用是将Cursor对象中的数据绑定到...
本教程将深入探讨如何在C#中使用Xamarin.Android来实现ListView的基本操作,旨在帮助开发者快速掌握这一核心功能。 首先,我们需要理解ListView的基本结构。ListView通常与一个Adapter配合工作,Adapter是数据源和...
Handler是Android中的一个关键组件,它允许开发者在不同的线程之间发送和处理消息,从而实现异步操作。 首先,我们需要了解Android Studio的基础环境设置。Android Studio是Google提供的官方集成开发环境(IDE),...