从运行或的AsyncTask主题服务?(Running a Service from ASyncTa

2019-09-23 13:26发布

我有一个Android应用程序,它使用服务时,应用程序是开放的,不断在视图更新一个TextView。 它使用它发送给意图广播接收机它更新。 通过该应用程序的性质,服务需要继续应用程序已经结束,也/视图不见了运行。 显然,这是不明智的,在这种情况下,运行在主线程的服务,因为这将霸占了太多,最终强制关闭和崩溃的应用程序。 那么什么是继续执行此服务的最佳方式? 一个的AsyncTask? 一个单独的线程? 我将如何去这样做呢? 我有一个像这样的的AsyncTask试了一下:

private class MyTask extends AsyncTask {

    @Override
    protected Object doInBackground(Object... objects) {
        return getActivity().getApplicationContext().startService(intent);
    }

    @Override
    protected void onCancelled() {
        getActivity().getApplicationContext().stopService(intent);
        super.onCancelled();
    }
}

哦,是的,我使用getActivity()。getApplicationContext(),因为这是一个片段内。

因此,这正常工作; 我叫MyTask.execute()的时候,我想谈谈它和MyTask.cancel(真)时,我想阻止它,但我敢肯定,我不使用它,它应该如何使用。 我甚至不知道我应该为execute方法(?)的参数来使用。 它似乎并不是刚刚开始它的服务,没有别的好主意,一定会更好地工作,只使用一个线程? 什么是去了解这一点,以便为它工作,它的目的是方式的正确方法? 顺便说一句,这虽然比主线程上运行它长得多的工作,但它仍然数小时后崩溃。

Answer 1:

您可以使用异步任务做后台任务的机器人。 线程处理你自己是不明智的,除非在特定的情况。 异步任务会在后台线程运行,即使用户切换到另外的看法,你可以使用onProgress每隔一段时间得到回调()更新了。 以下是异步任务的一些好的教程让你开始。 请仔细去通过他们,因为异步任务将帮助你很多在Android开发。

http://mobileorchard.com/android-app-developmentthreading-part-2-async-tasks/

http://www.vogella.com/articles/AndroidPerformance/article.html

这里是官方文档: https://developer.android.com/reference/android/os/AsyncTask.html



Answer 2:

更新:我想我想通了。 我是什么,我想我需要做的路要走,显然对这种服务我有我只需要在前台(因此使用startForeground()方法)运行它。 这似乎是现在的工作。 抱歉!



Answer 3:

你不应该在另一个线程不是事件线程启动服务,而不是如果某些代码需要更长的时间在服务执行,把这些代码在只有服务类另一个线程。

要在非主要应用一些其他进程执行服务,你应该在清单文件中定义过程变量,在服务。



Answer 4:

呼吁背景startService thred不作后台线程的服务运行。 你应该叫startService正常,而无需使用异步任务。 在你的服务,你应该创建一个新的线程来完成工作。 在这里,你不应该使用的AsyncTask,因为这项服务可以无限期运行,它不是一个确定的任务。



文章来源: Running a Service from ASyncTask or Thread?