android 백엔드 실행 서비스 보고 작업 상태 편
a. IntentService의 보고서 상태
Intent Service에서 작업 요청 결과 상태를 다른 구성 요소에 보내기 위해서, 우선 확장 데이터 영역에 이 상태를 포함하는 Intent를 만듭니다. 옵션을 사용하면 action과 데이터 URI를 이 Intent에 추가할 수 있습니다.그런 다음 LocalBroadcastManager를 호출합니다.sendBroadcast () 는 이 Intent를 보냅니다. 이 Intent는 응용 프로그램에 등록되어 있는 모든 구성 요소를 보냅니다.LocalBroadcastManager의 인스턴스를 보려면 getInstance()를 호출합니다.
예를 들면 다음과 같습니다.
/**
*
* Constants used by multiple classes in this package
*/
public final class Constants {
// Set to true to turn on verbose logging
public static final boolean LOGV = false;
// Set to true to turn on debug logging
public static final boolean LOGD = true;
... ...
// Defines a custom Intent action
public static final String BROADCAST_ACTION = "com.example.android.threadsample.BROADCAST";
... ...
// Defines the key for the status "extra" in an Intent
public static final String EXTENDED_DATA_STATUS = "com.example.android.threadsample.STATUS";
... ...
}
public class RSSPullService extends IntentService {
... ...
/*
* Creates a new Intent containing a Uri object
* BROADCAST_ACTION is a custom Intent action
*/
Intent localIntent =
new Intent(Constants.BROADCAST_ACTION)
// Puts the status into the Intent
.putExtra(Constants.EXTENDED_DATA_STATUS, status);
// Broadcasts the Intent to receivers in this app.
LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);
... ...
}
다음 단계에서는 원래 작업 요청을 보내는 어셈블리에서 전송된 Intent 브로드캐스트 객체를 처리합니다.
b. IntenService로부터 상태 브로드캐스트 수신
BroadcastReceiver 하위 클래스를 사용하여 Intent 대상을 수신하고 하위 클래스에서 BroadcastReceiver를 실현합니다.onReceive () 리셋 방법은 Intent를 받을 때 LocalBroadcastManager에서 이 전송된 Intent를 BroadcastReceiver에 호출하고 전달합니다.onReceive().
예를 들면 다음과 같습니다.
/ /**
* This class uses the BroadcastReceiver framework to detect and handle status messages from
* the service that downloads URLs.
*/
private class DownloadStateReceiver extends BroadcastReceiver {
{
// Prevents instantiation
private DownloadStateReceiver() {
}
// Called when the BroadcastReceiver gets an Intent it's registered to receive
@
public void onReceive(Context context, Intent intent) {
...
/*
* Handle Intents here.
*/
...
}
}
BroadcastReceiver를 정의하면 필터 (filters) 를 정의해서 지정한 actions, categories, 데이터와 일치하는 IntentFilter를 만들 수 있습니다. 예를 들어:
// Class that displays photos
public class DisplayActivity extends FragmentActivity {
...
public void onCreate(Bundle stateBundle) {
...
super.onCreate(stateBundle);
...
// The filter's action is BROADCAST_ACTION
IntentFilter mStatusIntentFilter = new IntentFilter(
Constants.BROADCAST_ACTION);
// Adds a data filter for the HTTP scheme
mStatusIntentFilter.addDataScheme("http");
...
}
LocalBroadcastManager 실례를 가져오고registerReceiver () 방법을 호출하여BroadcastReceiver와 IntentFilter를 등록합니다.
/**
* This activity displays Picasa's current featured images. It uses a service running
* a background thread to download Picasa's "featured image" RSS feed.
* <p>
* An IntentHandler is used to communicate between the active Fragment and this
* activity. This pattern simulates some of the communication used between
* activities, and allows this activity to make choices of how to manage the
* fragments.
*/
public class DisplayActivity extends FragmentActivity implements OnBackStackChangedListener {
... ...
... ...
// Instantiates a new DownloadStateReceiver
DownloadStateReceiver mDownloadStateReceiver =
new DownloadStateReceiver();This first snippe
// Registers the DownloadStateReceiver and its intent filters
LocalBroadcastManager.getInstance(this).registerReceiver(
mDownloadStateReceiver,
mStatusIntentFilter);
... ...
... ...
}
하나의 Broadcast Receiver는 여러 종류의 Intent 대상을 처리할 수 있습니다. 각각의 action은 각각의 action에 따라 다른 코드를 실행할 수 있습니다. 같은 Broadcast Receiver에 또 다른 Intent Filter를 정의하기 위해 이 Interfilter를 만들고, 리셋을 사용하십시오. ()예를 들면 다음과 같습니다.
public class DisplayActivity extends FragmentActivity implements OnBackStackChangedListener {
... ...
... ...
// Creates a second filter for ACTION_ZOOM_IMAGE
displayerIntentFilter = new IntentFilter(Constants.ACTION_ZOOM_IMAGE);
// Registers the receiver
LocalBroadcastManager.getInstance(this).registerReceiver(
mFragmentDisplayer,
displayerIntentFilter);
... ...
... ...
}
Intent 라디오를 보내면 start나resume의Activity가 되지 않습니다. 백엔드에 적용되어도Activity의BroadcastReceiver는 Intent 대상을 수신하고 처리할 수 있지만, 백엔드에 적용되는 것을 강제하지 않습니다. 백엔드에서 볼 수 없는 이벤트가 발생하면, 이벤트를 사용자에게 알리고 싶으면 Notification을 사용하십시오.들어오는 Intent 브로드캐스트에 응답하는 Activity를 시작하지 않습니다.
전체 코드 예제는 Download the sample 참조
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.