Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务、线程或异步任务_Java_Android_Android Asynctask_Android Service - Fatal编程技术网

Java 服务、线程或异步任务

Java 服务、线程或异步任务,java,android,android-asynctask,android-service,Java,Android,Android Asynctask,Android Service,请原谅我的问题,因为我还是编程新手,所以我不完全理解主线程、异步任务、服务和线程的概念。我正在阅读有关Android服务的文档,因为我想在主线程之外执行一些任务。它说: 如果您需要在主线程之外执行工作,但只能在 用户正在与您的应用程序交互,那么您应该 可能会创建一个新线程而不是服务 1.他们是否说,在您离开应用程序后,“线程”立即停止(即:主页按钮) 例如,如果您想播放一些音乐,但只能在 活动正在运行,您可以在onCreate()中创建一个线程,开始 在onStart()中运行它,然后在onSt

请原谅我的问题,因为我还是编程新手,所以我不完全理解主线程、异步任务、服务和线程的概念。我正在阅读有关Android服务的文档,因为我想在主线程之外执行一些任务。它说:

如果您需要在主线程之外执行工作,但只能在 用户正在与您的应用程序交互,那么您应该 可能会创建一个新线程而不是服务

1.他们是否说,在您离开应用程序后,“线程”立即停止(即:主页按钮)

例如,如果您想播放一些音乐,但只能在 活动正在运行,您可以在onCreate()中创建一个线程,开始 在onStart()中运行它,然后在onStop()中停止它。也考虑使用 AsyncTask或HandlerThread,而不是传统的Thread类。 有关详细信息,请参阅进程和线程文档 线程

2.如果线程被烘焙到Java中,为什么android会有异步任务

请记住,如果您确实使用了服务,它仍然会在您的应用程序中运行 默认情况下,应用程序的主线程,所以您仍然应该创建一个新的 服务中的线程(如果它执行密集或阻塞) 行动

3.这基本上是不是意味着,几乎每个服务基本上都会在其中创建一个线程

4.在服务内部启动异步任务是否不好

  • 当你离开应用程序时,线程不会立即停止。建议使用单独的线程只是为了不阻塞应用程序的GUI

  • AsyncTasks实际上在后台使用线程池,因为创建线程是一个昂贵的过程。如果您有许多短期任务,那么使用
    AsyncTask
    只是一种快速、简单但高效的方法,可以在不阻塞应用程序GUI的情况下执行它们

  • 是的,基本上是这样。一个服务比一根线更重。使用服务代替线程不是一个好主意。此外,服务实际上可以在整个其他进程上执行。仅供参考

  • 不。如果你有许多短期任务要执行,这将是一个好主意

  • 如果您只是尝试在主线程之外执行任务,那么您不需要服务。只需创建另一个线程

    AsyncTask
    幕后只是将任务提交到线程池执行。如果您有许多短期任务,比如解析网络流量,
    AsyncTask
    非常好

    但是,如果要处理大量请求,可能需要对执行任务的线程池进行更多控制

  • 没有

  • 因为主线程控制UI,而asynctasks可以在保持UI无延迟的情况下执行更繁重的任务

  • 不,但若你们想让你们的服务承担繁重的工作,比如从互联网上装载东西,那个么它应该使用异步任务。大多数服务用于从internet加载数据,因此它们中的大多数都有异步任务。请注意,要使服务在活动结束后保持活动状态,必须指定它。除非配置正确,否则默认情况下服务将随活动一起消亡

  • 没有

  • 1.他们是否说,在您离开应用程序后,“线程”立即停止(即:主页按钮)

    当启动它的
    线程
    被销毁时,应该销毁
    线程
    。因此,如果在
    活动
    中启动
    线程
    ,则当该
    活动
    被销毁或传输到
    服务时,该线程应被销毁。例如,您可以在
    线程中启动音乐
    并在那里更新歌曲,但如果您希望在
    活动
    被销毁时继续播放,则应将其移动到
    服务

    2.如果线程被烘焙到Java中,为什么android会有异步任务

    AsyncTask
    允许您在后台工作完成之前、期间和之后,通过使用其任何内置方法(除了
    doInBackground()
    ),执行后台工作并轻松更新
    UI
    ,因为它是唯一不在
    UI线程上运行的方法

    3.这基本上是不是意味着,几乎每个服务基本上都会在其中创建一个线程

    不一定,但您可以在其内部创建
    线程

    4.在服务内部启动异步任务是否不好

    不,你可以这样做


    这是做背景工作的好方法。它的方法使得更新
    UI
    非常容易。但是您需要仔细阅读文档(甚至可能几次),以确保完全理解如何使用它们。此外,请记住,这些用于短期操作,因此它们可以很好地用于下载网络数据,但不应用于持续时间超过几秒钟的操作(根据文档)

    您可能会被线程、任务和进程弄糊涂。任务是一种小型进程。进程 是一个在你的系统中运行的程序,例如启动任务管理器时,它显示所有进程都像Internet explorer一样运行,但线程是一个小的轻量级进程,这意味着你可以说执行某些任务的子进程,但在安卓中是异步的,与线程类似,但可能很长安卓你正在安卓手机上玩temple run游戏,有人打电话给你,以便执行高优先级任务,当前线程暂停在那里,并且有很多方法
    就像onCreate()、onPause()一样,您可以理解它。

    您应该指定asynctasks用于执行重载!这是asynctask的主要用途之一。不,您只需要在非gui线程上进行联网。由于异步任务在非gui线程上执行,因此可以使用它,但它不是唯一的解决方案@Dante不,
    AsyncTask
    不一定是重任务