将BufferedReader传递给服务

时间:2013-06-28 13:01:12

标签: android serialization android-service bufferedreader

我有一个方法返回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传递给服务?

2 个答案:

答案 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?