最近在做一个android上的游戏,用到了多个线程,当一切准备基本完成时出现了一个小问题,选择退出时finish掉了一个Activity但是里面的线程却没办法结束掉,因此就算退出了游戏等到线程结束时该执行的页面还是会跳出一个Activity,原来finish一个Activity并不能结束掉一个线程,于是我又尝试thread.stop()方法,还是没有效果,thread.distroy()方法总会显示出错,这些给我造成了一个很大的困惑,不知道哪位大神可以帮我解释一下,最后经过查找资料找到了解决办法,那就是定义一个boolean型的cancle变量,当cancle变量为true时在线程中return一下就好使了,
下面是一个小例子
private void init_main_thread()
{
main_thread = new Thread(new Runnable() {
/**
* @author zhangxiaomin
* 主要功能:游戏计时线程,设定开启矿脉的事件,增加player矿产数量,线程结束后实现页面跳转
*/
public void run() {
System.out.println(time);
while (time > 0) {
// System.out.println(time);
try {
this.sleep(1000);
mHandler.post(new Runnable() {
public void run() {
handlerRun();
}
});
time--;
System.out.println(time+"");
if (time <= 0) {
setPlayerScore();
Intent intent = new Intent();
intent.setClass(MapActivity.this,
RateActivity.class);
finish();
startActivity(intent);
}
if(cancle)
{
return;
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void sleep(int i) throws InterruptedException {
Thread.sleep(i);
}
});
}
分享到:
相关推荐
在Android开发中,经常会用到线程和Timer,如果没有主动关闭它们,当程序结束时,线程并没有被销毁,而是一直在后台运行着,当我们重新启动应用时,又会重新启动一个线程,周而复始,你启动应用次数越多,开启的线程...
总结,结束Android线程时,关键在于优雅、安全地中断操作,而不是简单粗暴地停止。合理的线程管理可以提升用户体验,避免ANR,并保持应用程序的稳定运行。正确使用Thread、AsyncTask、Handler和Looper等工具,结合...
3. ExecutorService:Java提供的线程池服务,可以创建固定数量的线程,适合处理并发上传任务,避免了频繁创建销毁线程的开销。 4. OkHttp库:OkHttp是一个高效的HTTP客户端,支持自定义拦截器,可以方便地实现多线程...
这个"Android线程问题.rar"压缩包可能包含了关于Android多线程的一些深入问题和实践案例,帮助开发者提升这方面的专业能力。 在Android系统中,主线程(也称为UI线程)负责处理用户交互事件,如触摸屏幕、显示通知...
本文将深入探讨Android线程的概念、类型以及如何有效地利用线程进行编程,包括各种经典用法,并提供完整的代码示例。 一、Android线程基础 在Android系统中,主线程也称为UI线程,负责处理用户界面的所有交互。由于...
- **使用Executor服务**:更高级的方式,可以管理线程池,避免大量创建销毁线程的开销。 3. **AsyncTask**:Android提供的轻量级异步任务框架,包含`onPreExecute()`, `doInBackground()`, `onProgressUpdate()`, ...
因此,我们需要在Android中创建和管理多线程来解决这个问题。 一、线程类型 1. **标准Java线程**:可以使用`java.lang.Thread`类直接创建线程,通过重写`run()`方法实现线程任务。 2. **Handler/Looper/Message机制...
在开发过程中,理解并熟练掌握Activity的生命周期、线程优先级、异常销毁以及任务栈原理,可以帮助我们编写出更加稳定、高效且用户体验良好的Android应用。在ActivityLifecycle这个项目中,开发者可以通过参考代码来...
本篇文章将详细介绍Android线程的基础知识、使用方法及同步机制等内容。 #### 一、Android线程概述 在Android应用开发过程中,线程的应用非常广泛。线程作为进程中的执行单元,可以被用来处理一些耗时操作,如网络...
### Java/Android线程使用深度解析 在计算机科学领域,线程与进程是核心概念,尤其是在多任务操作系统中。本文将深入探讨Java/Android环境下的线程管理,包括线程的创建、线程池的利用及`ThreadHandler`的运用等...
线程池可以控制并发线程的数量,避免大量创建和销毁线程带来的性能开销,同时提供任务调度和优先级管理。 3. **下载任务分解**:根据文件大小,将其划分为若干块,每块作为一个下载任务分配给线程。块大小的选择需...
线程池可以避免频繁创建和销毁线程的开销,提高性能。通过`Executors`类提供的静态方法,如`newFixedThreadPool`,可以创建一个固定大小的线程池,用于执行多线程任务。 2. **异步任务和AsyncTask**: Android提供...
因此,理解并掌握Android线程间的通信机制,尤其是message(消息)机制,对于优化应用性能至关重要。 Android线程间通信的主要方式有:Handler、Looper、Message以及BroadcastReceiver等。其中,Handler-Looper-...
- AsyncTask:更适合轻量级的异步操作,它简化了线程管理和回调,但不适用于大量或长期运行的任务,因为它会随着Activity的销毁而被回收。 2. **下载逻辑**: - 分块下载:将大文件分成多个小块,每个线程负责...
为了解决这个问题,开发者需要学会使用多线程。\n\n1. **Intent理解**\nIntent是Android中用于组件间通信的重要工具,它可以描述一个动作、接收者和传递的数据。Intent分为显式启动和隐式启动两种方式。显式启动明确...
5. **ThreadPoolExecutor**:Android虽然不直接支持,但可以通过引入Java并发库来实现线程池,它可以帮助优化线程资源,减少线程创建和销毁的开销,适用于大量并发任务。 6. **RxJava/RxAndroid**:这是一种基于...
在Android开发中,多线程下载是提升用户体验的重要技术,特别是在下载大文件如APK时。这个"android多线程下载demo"展示了如何利用多线程分段下载一个APK文件,同时实现实时更新UI展示下载进度,并在下载完成后自动...
本讲将深入探讨Android线程的使用,特别是如何利用Handler来实现在主线程中更新UI。Handler是Android中的一个消息处理机制,它与Looper和Message紧密配合,用于在不同的线程间传递消息并执行相应的回调方法。 1. **...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理高性能图形和视频渲染时。`SurfaceView`提供了直接与硬件图形管道交互的能力,使得开发者可以在单独的线程中进行绘制,从而避免阻塞UI主线程,...
在多线程环境中,线程同步和通信是必须面对的问题。Java提供了多种机制,如synchronized关键字、wait()和notify()方法、Volatile关键字以及CountDownLatch、Semaphore等并发工具类,来保证线程安全和数据一致性。 ...