Android : 지역 서비스와 물체를 전달하고 교환하는 방법은 무엇입니까?
-
20-09-2019 - |
문제
지금까지 나는 간단한 현지 서비스를위한 수업입니다. 내가하고 싶은 것은 요청을 보낼 이 지역 서비스에 다른 활동에서 내 응용 프로그램에서. 이 요청의 매개 변수에 따라 서비스는 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
객체, 옵션은 다음과 같습니다.
싱글 톤을 사용하십시오 (예 : 당신의
BackgroundService
공개 정적 데이터 멤버와 같은 정적 컨텍스트에서 사용할 수있는 개체는 해당 정적 참조를 무효화합니다.onDestroy()
).다음을 따르십시오
LocalServiceBinding
반환 할 API 샘플IBinder
그것은 단순히 접근을 제공합니다BackgroundService
물체.
거기에서 모든 것이 동일한 JVM에 있으므로 객체를 전달할 수 있습니다. 그러나 구성 요소 수명을 지나서 아무것도 붙잡지 않도록주의하십시오 (예 : Activity
싱글 톤을 캐시해서는 안됩니다).