수색…


통사론

  1. <service android : name = ". UploadS3IntentService"android : exported = "false"/>

비고

IntentService 는 백그라운드 스레드에서 작업을 오프로드하는 간단한 방법을 제공합니다. 요청 수신, 대기열에 넣기, 자체 정지 등 모든 것을 처리합니다. 구현하기도 쉽기 때문에 Main (UI) 스레드에 속하지 않는 시간 소모적 인 작업을 수행 할 때 사용하는 것이 가장 좋습니다.

IntentService 만들기

확장하는 클래스 생성, IntentService를 만들려면 IntentService , 그 안에서, 어떤 방법이 우선 onHandleIntent :

package com.example.myapp;
public class MyIntentService extends IntentService {
    @Override
     protected void onHandleIntent (Intent workIntent) {
         //Do something in the background, based on the contents of workIntent.
     }
}

샘플 인 텐트 서비스

다음은 백그라운드에서 이미지를로드하는 것처럼 보이는 IntentService 의 예입니다. IntentService 를 구현하려면 super(String) 생성자를 호출하는 생성자를 제공하고 onHandleIntent(Intent) 메서드를 구현해야합니다.

public class ImageLoaderIntentService extends IntentService {

    public static final String IMAGE_URL = "url";

    /**
     * Define a constructor and call the super(String) constructor, in order to name the worker
     * thread - this is important if you want to debug and know the name of the thread upon 
     * which this Service is operating its jobs.
     */
    public ImageLoaderIntentService() {
        super("Example");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // This is where you do all your logic - this code is executed on a background thread

        String imageUrl = intent.getStringExtra(IMAGE_URL);

        if (!TextUtils.isEmpty(imageUrl)) {
            Drawable image = HttpUtils.loadImage(imageUrl); // HttpUtils is made-up for the example
        }

        // Send your drawable back to the UI now, so that you can use it - there are many ways
        // to achieve this, but they are out of reach for this example
    }
}

IntentService 를 시작하려면 Intent 를 보내야합니다. 예를 들어 Activity 에서 그렇게 할 수 있습니다. 물론, 당신은 그것에 국한되지 않습니다. 다음은 Activity 클래스에서 새 Service 를 소환하는 방법의 예입니다.

Intent serviceIntent = new Intent(this, ImageLoaderIntentService.class); // you can use 'this' as the first parameter if your class is a Context (i.e. an Activity, another Service, etc.), otherwise, supply the context differently
serviceIntent.putExtra(IMAGE_URL, "http://www.example-site.org/some/path/to/an/image");
startService(serviceIntent); // if you are not using 'this' in the first line, you also have to put the call to the Context object before startService(Intent) here

IntentServiceIntent 의 데이터를 순차적으로 처리하므로 여러 Intent 가 서로 충돌할지 걱정하지 않고 보낼 수 있습니다. 한 번에 하나의 인 Intent 만 처리되고 나머지는 대기열에 있습니다. 모든 작업이 완료되면 IntentService 가 자동으로 종료됩니다.

기본 IntentService 예제

추상 클래스 IntentService 는 사용자 인터페이스없이 백그라운드에서 실행되는 서비스의 기본 클래스입니다. 따라서 UI를 업데이트하려면 수신기 ( BroadcastReceiver 또는 ResultReceiver 중 하나 일 수 있음)를 ResultReceiver .

  • 서비스가 통신을 청취하려는 여러 구성 요소와 통신해야하는 경우 BroadcastReceiver 사용해야합니다.
  • ResultReceiver : 귀하의 서비스가 상위 어플리케이션 (예 : 어플리케이션)과 통신해야하는 경우 사용해야합니다.

IntentService 내에는 IntentService onHandleIntent() 핵심 메소드가 하나 있는데 여기에는 알림 준비, 알람 생성 등과 같은 모든 작업을 수행합니다.

자신의 IntentService 를 사용하려면 다음과 같이 확장해야합니다.

public class YourIntentService extends IntentService {
    public YourIntentService () {
        super("YourIntentService ");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO: Write your own code here.
    }
}    

활동 호출 / 시작은 다음과 같이 수행 할 수 있습니다.

Intent i = new Intent(this, YourIntentService.class);
startService(i);  // For the service.
startActivity(i); // For the activity; ignore this for now.

어떤 활동과 마찬가지로 다음과 같이 번들 데이터와 같은 추가 정보를 전달할 수 있습니다.

Intent passDataIntent = new Intent(this, YourIntentService.class);
msgIntent.putExtra("foo","bar");
startService(passDataIntent);

이제 YourIntentService 클래스에 일부 데이터를 전달했다고 가정합니다. 이 데이터를 바탕으로 다음과 같이 작업을 수행 할 수 있습니다.

public class YourIntentService extends IntentService {
    private String actvityValue="bar";
    String retrivedValue=intent.getStringExtra("foo");

    public YourIntentService () {
        super("YourIntentService ");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if(retrivedValue.equals(actvityValue)){
            // Send the notification to foo.
        } else {
            // Retrieving data failed.
        }    
    }
}

위의 코드는 OnHandleIntent() 메서드에서 제약 조건을 처리하는 방법을 보여줍니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow