Android从MainActivity中的服务获取数据

时间:2017-03-01 20:45:06

标签: android android-intent android-service

您是否知道是否有任何方法可以从MainActivity启动服务,发送一些数据以及服务何时完成,从服务获取数据。例如:

//MainActivity.class

private ArrayList myList = new ArrayList();

public void fetchDataFromInternet()
{
    Intent intent = new Intent(this, DataFromInternetService.class);
    intent.putArrayListExtra("MYLIST", myList);  
    startService(intent);

    //In DataFromInternetService the app fetches data from the internet and puts them in the myList.
    /*
         TODO:
         1. Get the data from the service after the it has finished.
    */
}
//Note: The service runs only 1 time.

此外,如果无法做到这一点,您建议使用哪种方法,MainActivity可以访问DataFromInternetService.class中的数据。

注意:我不想使用LoaderManager,我使用服务来执行不会影响UI的后台任务。

4 个答案:

答案 0 :(得分:1)

要与您的服务进行通信,您可以使用“绑定服务”:

请检查一下: https://developer.android.com/guide/components/bound-services.html

或者您可以在以下位置发送数据:广播接收器,数据库,共享首选项。这取决于你的需求。

答案 1 :(得分:0)

您应该使用Async Tasks

,而不是使用服务在后台运行内容

您可以执行以下操作:

new AsyncTask<Void,Void,Void>(){

doInBackground(){

//DO STUFF

}

onPostExecute(){
//Do What You want with the results
}
}

}

答案 2 :(得分:0)

如果您想与服务进行通信,则必须使用绑定服务并在活动中绑定它。然后为您的活动和服务创建处理程序。使用这些处理程序,您可以在下载完成后通知您的活动。 如果您设法解决问题或需要进一步说明,请告诉我。

答案 3 :(得分:0)

这就是几年前任何讨论已经完成的问题,但每当我们需要为我们的应用选择最舒适的方法时,我们仍然会感到困扰。我不应该深入研究代码示例或低级别的解释。你可以自己找到超过需要的信息。
我可以提供帮助的一件事(我希望如此)是分享我的方法。 当我遇到像how to pass data between two different components?这样的问题时 - 我认为这种情况是直截了当的。您需要通知您的饥饿组件(在我们的特定情况下的活动)已完成提取,并且可以从值得信赖的地方获取其信息。或者更残忍,将数据直接传递给它。这可以通过不同的实现/解决方案来实现,但抽象的意识形态保持不变。
你能做什么?以下是一些链接:

仍然有更有价值的解决方案,但这些已经足够了。