Android:如何使用本地服务进行通信和交换?

znq*_*znq 1 android json http android-service

到目前为止,我有一个简单的本地服务课程.我想要做的是我的应用程序中的不同活动发送请求到本地服务.根据这些请求的参数,服务将通过HttpClient连接到Web服务器并接收JSONObject并将其返回给活动.所有HTTP通信都已在我的活动中工作,但我希望它现在在我的本地服务中的一个单独的线程中运行.

到目前为止,我非常简单的本地服务的源代码如下所示:

// BackgroundService.java
package com.test.localservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class BackgroundService extends Service
{
    @Override
    public void onCreate() {
        super.onCreate();
        Log.i("BackgroundService", "onCreate()");
        Thread thr = new Thread(null, new RunThread(), "BackgroundService");
        thr.start();
    }
    class RunThread implements Runnable
    {
        public void run() {
            Log.i("BackgroundService", "run()");

            /* Here the HTTP JSON communication is going to happen */

            //BackgroundService.this.stopSelf();
        }
    }
    @Override
    public void onDestroy()
    {
        Log.i("BackgroundService", "onDestroy()");
        super.onDestroy();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        Log.i("BackgroundService", "onStart()");
        super.onStart(intent, startId);
    }
    @Override
    public IBinder onBind(Intent intent) {
        Log.i("BackgroundService", "onBind()");
        return null;
    }

}
Run Code Online (Sandbox Code Playgroud)

我现在面临的问题(由于缺乏知识)是通信部分活动< - >本地服务.我使用AIDL(Android界面定义语言)找到了远程服务的一些通信和对象交换示例.但是,我不确定我是否应该走这条路.我只想交换我自己定义的对象,或者如果那是不可能的那么只是一个JSONObject,或者如果它使事情变得更容易,即使只是简单的String Arrays也可以(现在).

有人可以指出我正确的方向,如果可能的话,给出一个与本地服务进行对象交换(两种方式)的简单示例.

提前致谢.

Com*_*are 5

我建议AsyncTask在这种情况下使用一个而不是你自己的线程.

要为活动提供BackgroundService对象的引用,您的选项是:

  1. 使用单例(即,使您的BackgroundService对象可以从静态上下文中获取,例如公共静态数据成员,将静态引用置零onDestroy()).

  2. 按照LocalServiceBindingAPI示例返回一个IBinder只提供BackgroundService对象访问权限的方法.

从那里,一切都在同一个JVM中,所以你可以只传递对象.但是要小心,不要抓住组件生命周期之外的任何事情(例如,Activity不应该缓存单例).