Android : 지역 서비스와 물체를 전달하고 교환하는 방법은 무엇입니까?

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;
    }

}

내가 지금 직면하고있는 문제 (지식 부족으로 인해)는 의사 소통 부분입니다. 활동 <-> 지역 서비스. 나는 몇 가지 커뮤니케이션 및 객체 교환 예제를 찾았습니다. 원격 서비스 사용 에이즈 (Android Interface Definiton 언어). 그러나이 길을 갈 것인지 확실하지 않습니다. 나는 단순히 내 자신의 정의 된 객체를 교환하고 싶거나 그것이 불가능한 경우 jsonobject 만 있거나 간단한 문자열 배열조차 훨씬 쉬워지면 (지금은) 작동 할 수 있습니다.

누군가 나를 올바른 방향으로 가리키며 가능한 경우 로컬 서비스와 함께 객체 교환 (두 가지 방법 모두)의 간단한 예를 제시 할 수 있습니까?

미리 감사드립니다.

도움이 되었습니까?

해결책

나는 사용하는 것이 좋습니다 AsyncTask 이 시나리오에서 자신의 스레드 대신.

활동에 당신의 참조를 제공합니다 BackgroundService 객체, 옵션은 다음과 같습니다.

  1. 싱글 톤을 사용하십시오 (예 : 당신의 BackgroundService 공개 정적 데이터 멤버와 같은 정적 컨텍스트에서 사용할 수있는 개체는 해당 정적 참조를 무효화합니다. onDestroy()).

  2. 다음을 따르십시오 LocalServiceBinding 반환 할 API 샘플 IBinder 그것은 단순히 접근을 제공합니다 BackgroundService 물체.

거기에서 모든 것이 동일한 JVM에 있으므로 객체를 전달할 수 있습니다. 그러나 구성 요소 수명을 지나서 아무것도 붙잡지 않도록주의하십시오 (예 : Activity 싱글 톤을 캐시해서는 안됩니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top