好的,这里...我是Android编程的新手,我迫切需要方向。
我的最终结果是能够向我的service
发送请求,并根据请求的内容,让它执行不同的操作。
示例1:用户按下活动中的刷新按钮,该按钮会下载信息然后将其显示出来。
示例2:用户导航到可以输入用户名和密码的活动中的登录片段。他预先显示了他当前保存的信息。
示例3:用户按下小部件,小部件下载信息,然后在小部件中显示一些信息。
希望我的想法得到了解决;将消费任务发送到服务,能够更新当前正在处理的任何显示。
services'
任务取决于对它的要求(服务:我下载吗?我是否获取登录信息?我是否获取其他信息?), 必须 知道如何继续,一旦开始...这引出了我的问题:
如何告诉我的服务在调用后执行哪项任务? 此外,但不太重要的是,更新视图(小部件,活动)的最佳,最具代码效率的方法是什么?
背景资料:
AsyncTask
。Intent intent = new Intent(getActivity(), WorkerService.class);
getActivity().startService(intent);
答案 0 :(得分:1)
您可以使用BoundService
绑定服务是客户端 - 服务器接口中的服务器。绑定服务允许组件(例如活动)绑定到服务,发送请求,接收响应,甚至执行进程间通信(IPC)。绑定服务通常仅在其服务于另一个应用程序组件时才存在,并且不会无限期地在后台运行。
您有两种创建BoundService的方法:
1)使用活页夹 - 这可能就是你想要做的。
如果您的服务是您自己的应用程序的私有服务并且在该服务中运行 与客户端(这是常见的)相同的过程,你应该创建你的 接口通过扩展Binder类并返回一个实例 来自onBind()。客户端收到Binder并可以使用它 直接访问Binder中可用的公共方法 实施甚至服务。这是首选技术 当您的服务仅仅是您自己的后台工作者时 应用。这是你不创建界面的唯一原因 方式是因为您的服务被其他应用程序或跨越 单独的过程。
2)使用Messanger
请记住,该服务在UI(主)线程中运行。如果你进行持久的操作,你应该创建一个后台线程。
public class LocalService extends Service {
// Binder given to clients
private final IBinder mBinder = new LocalBinder();
// Random number generator
private final Random mGenerator = new Random();
/**
* Class used for the client Binder. Because we know this service always
* runs in the same process as its clients, we don't need to deal with IPC.
*/
public class LocalBinder extends Binder {
LocalService getService() {
// Return this instance of LocalService so clients can call public methods
return LocalService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
/** method for clients */
public int getRandomNumber() {
return mGenerator.nextInt(100);
}
}