الروبوت:كيفية التواصل وتبادل الكائنات مع الخدمة ؟

StackOverflow https://stackoverflow.com/questions/1542499

سؤال

حتى الآن لقد فئة بسيطة الخدمة المحلية.ما أريد القيام به هو ترسل الطلبات أن هذه الخدمة المحلية من مختلف نشاطهم في التطبيق.اعتمادا على المعلمات من هذه الطلبات وخدمة الاتصال عبر HttpClient إلى خادم الويب والحصول على 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 (الروبوت واجهة Definiton اللغة).ومع ذلك أنا لست متأكدا مما إذا كان يجب أن تذهب في هذا الطريق.أود ببساطة أن الصرف إما بلدي تعريف الأشياء أو إذا كان ذلك غير ممكن ثم مجرد شكل خاص أو إذا كان يجعل الأمور أسهل بكثير حتى بسيطة فقط صفائف سلسلة العمل (حاليا).

يمكن للشخص يرجى لي نقطة في الاتجاه الصحيح إذا كان ذلك ممكنا إعطاء مثال بسيط من كائن الصرف (في الاتجاهين) مع الخدمات المحلية.

شكرا مقدما.

هل كانت مفيدة؟

المحلول

أقترح استخدام AsyncTask بدلا من الخاصة بك موضوع في هذا السيناريو.

لإعطاء نشاط إشارة إلى BackgroundService الكائن الخاص بك خيارات هي:

  1. استخدام المفرد (أي جعل الخاص بك BackgroundService كائن من ساكنة السياق ، مثل الجمهور بيانات ثابتة عضو nulling أن ثابت المرجعية في onDestroy()).

  2. اتبع LocalServiceBinding API عينة إعادة IBinder ببساطة يتيح الوصول إلى BackgroundService الكائن.

من هناك, كل شيء في نفس JVM لذلك يمكنك فقط تمرير الكائنات حولها.كن حذرا على الرغم من عدم التمسك بأي شيء الماضية المكون مدى الحياة (على سبيل المثال ، Activity يجب أن لا ذاكرة التخزين المؤقت المفرد).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top