您是否知道是否有任何方法可以从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的后台任务。
答案 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?
这样的问题时 - 我认为这种情况是直截了当的。您需要通知您的饥饿组件(在我们的特定情况下的活动)已完成提取,并且可以从值得信赖的地方获取其信息。或者更残忍,将数据直接传递给它。这可以通过不同的实现/解决方案来实现,但抽象的意识形态保持不变。
你能做什么?以下是一些链接:
仍然有更有价值的解决方案,但这些已经足够了。