被异步机制

时间:2017-12-06 11:35:49

标签: android asynchronous

我很担心android是多线程的。如果特定活动方法的代码正在执行,可以通过onPause()onStop()onDestroy()或其他方法(例如asynctask的onPostExecute())中断它?

编辑1

这个问题与活动生命周期无关。我真正想问的是onPause()方法是否可以中断onClick()方法(只是一个例子),我想了解更多关于android如何管理活动,调用异步方法等...

编辑2

好的,似乎我在开发人员文档中找到了我需要的相关信息(不知道其他地方是否有更好的解释):Threading Performance

  

塔内

     

主线程设计非常简单:它唯一的工作就是采取和   从线程安全的工作队列中执行工作块,直到其应用程序为止   终止。该框架从中生成了一些工作块   各种各样的地方。这些地方包括与之相关的回调   生命周期信息,输入或事件等用户事件   来自其他应用和流程。此外,应用程序可以明确排队   在不使用框架的情况下自行阻止。

它声明相对于活动生命周期的回调,用户事件(如输入和其他代码)都使用“线程安全工作队列”进行管理。这对理解Android异步编程至关重要。它解释了许多内容,例如为什么onClick()永远不会被onPause()活动中断,或者为什么onClick()永远不会被使用Handler对象(在主线程中分配)发布的runnable中断。因此,例如,AsyncTask的onPostExecute()不能中断onClick()方法(或onStart(),onResume(),onPause()等...)。作为新手Android程序员,起初有点令人困惑。

2 个答案:

答案 0 :(得分:2)

根据您的问题,我认为您需要了解Android应用程序生命周期的基本知识。

基本上,生命周期处理不同情况下的应用状态。 就像应用程序进入时的状态一样,在前景或后台,以及所有这些因此这些周期表明您提到过onPause()onDestroy()onStart()onCreate()。< / p>

现在谈谈AsynchTask(),如果你想执行长时间运行的过程,如下载图像或听力沉思或其他任何其他,那么我们将使用BackGround服务。所以不要混淆生命周期方法和后台服务。 。

第三,App只会关闭一些罕见的情况,比如如果内存不足或App中出现其他一些致命问题,那么它只会终止。

因此,调查结果表明,Thread适用于长时间运行的过程,而Activity Life Cycles方法适用于各种活动状态

Please follow this tutorial and I hope you will get clarification

答案 1 :(得分:1)

我认为这是一个很好的问题。但是,这是我的理解:

当应用程序启动时,会为其分配Dalvik虚拟机(DVM)并单独工作。因此,没有两个应用程序互相中断,因为每个应用程序都由单独的DVM管理。

来到Activity,它是Android的一个组件,在主线程上运行。 Android OS管理其组件的优先级。它为活动,服务提供高优先级,可能是其他组件。操作系统维护主线程的非中断行为。

此外,当您运行AsyncTask时,它是后台长时间运行的任务,但依赖于应用程序上下文。因此操作系统无法保证对其进行管理。

现在关于活动生命周期。正如@nihal_softy所说,活动有自己的生命周期,它从onCreate()开始,遇到onStart(),onResume(),onPause(),onStop()和onDestroy()。您可以从Activity的任何位置或从AsyncTask调用这些方法,它将被调用,但并不意味着Activity将在后台运行或将销毁。换句话说,如果从AsyncTask调用onPause(),则并不意味着Activity将被发送到后台(如果在前台)。因为当Activity在后台运行时,它会调用它的生命周期方法,如onPause()和onStop()作为回调。但反过来却不正确。

我希望我的理解会帮助你得到答案。

相关问题