我有一个方法返回BufferedReader
我的应用程序从中获取另一个程序的输出。
在Manager.java中
public BufferedReader start() {
String[] commandLine2 = { "/system/bin/sh", "/system/app/launcher.sh" };
Process process = null;
try {
process = Runtime.getRuntime().exec(commandLine2);
reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
writer = new OutputStreamWriter(process.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return reader;
}
在我的MainActivity中,我使用:
outputReader = manager.start();
其中outputReader是BufferedReader
的私有实例,manager是Manager之一。
只要我在MainActivity.java中的AsyncTask中使用此Buffered阅读器一切正常,因为我的BufferedReader
在其范围中可见但当我想使用服务来完成时我有一些麻烦。
无法使用Intent.putExtra(Object)
的对象既不是Serializable也不是Parcelable(而且我的BufferedReader不是)。
如何将BufferedReader
传递给服务?
答案 0 :(得分:1)
我只使用Intent.putExtra传递原语,并且仅在它们为少数时才传递。 当我需要更多原语时,我声明一个DataTransferObjectOfMyType,它们保持在一起。 我将设置为一个公共位置,如MyApplication类中的ApplicationContext。 在新的意图,我正在检查是否存在,并使用它。好的或坏的设计我不在乎。这是工作。如果它对你来说也很重要,那么使用这种方法,因为它正在工作:)
顺便说一句:我不会通过Buffered读者,因为谁知道什么时候需要关闭。 而不是这个,我将传递所有参数,这需要创建一个BufferedReader。我希望它有所帮助!
答案 1 :(得分:1)
我建议你使用Bound Service
http://developer.android.com/guide/components/bound-services.html
绑定服务是客户端 - 服务器接口中的服务器。绑定服务允许组件(例如活动)绑定到服务,发送请求,接收响应,甚至执行进程间通信(IPC)
基本上,您可以在服务上公开公共方法并调用它们。因此,在这种情况下,您可以在服务中创建以下内容:
public void setReader(BufferedReader reader) {
this.reader = reader;
// do whatever you want with it in your service, etc.
}
并从您的活动中调用它。
有关详细信息,请参阅此精彩文章:Android - Using method from a Service in an Activity?