到目前为止,我一类对于一个简单的本地服务。什么我想要做的是 发送请求 这个当地的服务 从不同的活动 在我的应用程序。根据参数的这些要求的服务,将连接经由异常的一个网络服务器,并收到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;
    }

}

这问题我面对现在的(由于缺乏知识)是通信部 活动 <-->当地的服务.我发现了一些通信和对象交流的例子一个 远程服务 使用 AIDL (安卓界等复杂语言)。然而,我不知道如果我要走这条道路。我只想交换要么我自己定义的对象,或者如果不可能那只是一个JSONObject或者如果它使事情变得容易得多,甚至只是简单的文字阵列会的工作(现在).

有人可以请我在正确的方向,并如果可能,得到一个简单的例子的一个对象交换(这两种方法)与当地的服务。

在此先感谢。

有帮助吗?

解决方案

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

得到一个活动的一个参考你的 BackgroundService 对象,你的选择是:

  1. 使用一个单独的(即使你的 BackgroundService 对象可以从一个静态的方面,诸如公共静态数据成员,零出,静态参考 onDestroy()).

  2. 按照 LocalServiceBinding API样品返回一个 IBinder 那只是给访问 BackgroundService 对象。

从那里,一切都是在同一JVM,这样可以刚刚通过的对象.要小心,不过,没有举行任何过去的分寿命(例如, Activity 不应该缓存单).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top