Cronet 라이브러리를 사용하여 Android 앱 Cronet은 라이브러리로 사용할 수 있는 Chromium 네트워크 스택입니다. 여러 가지 옵션이 있습니다. 라이브러리 기능에 대한 자세한 내용은 참조: 다음을 사용하여 네트워크 작업 수행 Cronet
프로젝트에서 라이브러리 설정
프로젝트의 Cronet 라이브러리에 종속성을 추가하려면 다음 단계를 따르세요.
Android 스튜디오에 Google의 Maven 저장소 참조가 포함되었는지 확인 (프로젝트의
settings.gradle
파일에서) 예:Groovy
dependencyResolutionManagement { ... repositories { ... google() } }
Kotlin
dependencyResolutionManagement { ... repositories { ... google() } }
Cronet용 Google Play 서비스 클라이언트 라이브러리에 대한 참조 포함 앱 모듈의
build.gradle
파일에 있는dependencies
섹션에 다음 예에 나와 있습니다.Groovy
dependencies { implementation 'com.google.android.gms:play-services-cronet:18.0.1' }
Kotlin
dependencies { implementation("com.google.android.gms:play-services-cronet:18.0.1") }
생성된 CronetEngine
객체
Google Play 서비스에서 로드된 Cronet을 사용합니다. 전화걸기
CronetProviderInstaller.installProvider(Context)
드림
예기치 않은 예외를 방지하기 위해 CronetEngine
객체를 만들기 전
기기와 같은 오류로 인해 CronetEngine
생성 중에 발생되지 않음
업데이트된 버전의 Google Play 서비스가 필요합니다.
Google Play 서비스에서 Cronet을 로드할 수 없는 경우
사용할 수 있는 Cronet API의 성능이 낮은 구현입니다. 사용 방법
이 대체 구현은 org.chromium.net:cronet-fallback
에 종속됩니다.
그런 다음 new JavaCronetProvider(context).createBuilder()
를 호출합니다.
네트워크 요청 만들기
이 섹션에서는 Cronet을 사용하여 네트워크 요청을 만들고 전송하는 방법을 보여줍니다. 라이브러리를 탭합니다. 네트워크 요청을 보낸 후에는 앱에서 네트워크를 처리하고 응답을 참조하세요.
CronetEngine 인스턴스 만들기 및 구성
이 라이브러리는
CronetEngine.Builder
클래스
포드의 인스턴스를 만드는 데 사용할 수 있는
CronetEngine
다음 예를 참고하세요.
CronetEngine
객체를 만드는 방법을 보여줍니다.
Kotlin
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
자바
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
Builder
클래스를 사용하여
CronetEngine
객체에서 예를 들어
캐싱 및 데이터 압축과 같은 옵션을 제공합니다 자세한 내용은
CronetEngine.Builder
요청 콜백의 구현 제공
콜백 구현을 제공하려면
UrlRequest.Callback
및
다음 예와 같이 필요한 추상 메서드를 구현합니다.
Kotlin
private const val TAG = "MyUrlRequestCallback" class MyUrlRequestCallback : UrlRequest.Callback() { override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { Log.i(TAG, "onRedirectReceived method called.") // You should call the request.followRedirect() method to continue // processing the request. request?.followRedirect() } override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onResponseStarted method called.") // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request?.read(ByteBuffer.allocateDirect(102400)) } override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { Log.i(TAG, "onReadCompleted method called.") // You should keep reading the request until there's no more data. byteBuffer.clear() request?.read(byteBuffer) } override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onSucceeded method called.") } }
자바
class MyUrlRequestCallback extends UrlRequest.Callback { private static final String TAG = "MyUrlRequestCallback"; @Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { Log.i(TAG, "onRedirectReceived method called."); // You should call the request.followRedirect() method to continue // processing the request. request.followRedirect(); } @Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onResponseStarted method called."); // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request.read(ByteBuffer.allocateDirect(102400)); } @Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { Log.i(TAG, "onReadCompleted method called."); // You should keep reading the request until there's no more data. byteBuffer.clear(); request.read(byteBuffer); } @Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onSucceeded method called."); } }
Executor 객체를 만들어 네트워크 작업 관리
Executor
클래스를 사용하여 네트워크를 실행할 수 있습니다.
할 수 있습니다
Executor
의 인스턴스를 가져오려면
반환하는 Executors
클래스의 정적 메서드
Executor
객체 다음 예는 Executor
를 만드는 방법을 보여줍니다.
newSingleThreadExecutor()
를 사용한 객체
메서드를 사용하여 축소하도록 요청합니다.
Kotlin
val executor: Executor = Executors.newSingleThreadExecutor()
자바
Executor executor = Executors.newSingleThreadExecutor();
UrlRequest 객체 만들기 및 구성
네트워크 요청을 만들려면
newUrlRequestBuilder()
드림
다음 메서드를 전달하는 CronetEngine
의 메서드
도착 URL, 콜백 클래스의 인스턴스 및 실행자 객체입니다.
newUrlRequestBuilder()
메서드는
UrlRequest.Builder
객체
이를 사용하여 UrlRequest
객체에 추가합니다.
Kotlin
val requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", MyUrlRequestCallback(), executor ) val request: UrlRequest = requestBuilder.build()
자바
UrlRequest.Builder requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", new MyUrlRequestCallback(), executor); UrlRequest request = requestBuilder.build();
Builder
클래스를 사용하여 다음을 실행할 수 있습니다.
UrlRequest
의 인스턴스를 구성합니다. 대상
예를 들어 우선순위 또는 HTTP 동사를 지정할 수 있습니다. 자세한 내용은
UrlRequest.Builder
네트워크 작업을 시작하려면
start()
메서드를 호출합니다.
Kotlin
request.start()
자바
request.start();
이 섹션의 안내에 따라 네트워크를 만들고 전송할 수 있습니다.
Cronet을 사용하여 요청을 실행합니다. 그러나 이 예시에서는 편의상
구현해 보겠습니다.
UrlRequest.Callback
만 인화
로그에 메시지를 보냅니다. 다음 섹션에서는 콜백을 제공하는 방법을 보여줍니다.
보다 유용한 시나리오를 지원하는 더 유용한 시나리오(예:
요청의 실패 감지에 사용됩니다.
네트워크 응답 처리
start()
를 호출하면
메서드가 있으면 Cronet 요청 수명 주기가 시작됩니다. 앱에서
콜백을 지정하여 수명 주기 동안 요청을 처리합니다. 자세히 알아보려면
Cronet 요청
수명 주기를 참고하세요. 포드의
서브클래스를 만들어 콜백을
UrlRequest.Callback
및
다음과 같은 메서드를 구현합니다.
onRedirectReceived()
서버가 할 수 있습니다. 새 목적지로의 리디렉션을 따르려면
followRedirect()
드림 메서드를 사용하여 축소하도록 요청합니다. 그 외의 경우에는cancel()
를 사용합니다. 메서드를 사용하여 축소하도록 요청합니다. 다음 예에서는 메서드를 구현하는 방법을 보여줍니다.Kotlin
override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { // Determine whether you want to follow the redirect. ... if (shouldFollow) { request?.followRedirect() } else { request?.cancel() } }
자바
@Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { // Determine whether you want to follow the redirect. … if (shouldFollow) { request.followRedirect(); } else { request.cancel(); } }
onResponseStarted()
헤더의 마지막 집합이 수신될 때 호출됩니다.
onResponseStarted()
메서드는 모든 리디렉션을 따른 후에만 호출됩니다. 다음 코드는 는 메서드의 구현 예를 보여줍니다.Kotlin
override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { val httpStatusCode = info?.httpStatusCode if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request?.read(myBuffer) } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request?.read(myBuffer) } responseHeaders = info?.allHeaders }
자바
@Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { int httpStatusCode = info.getHttpStatusCode(); if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request.read(myBuffer); } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request.read(myBuffer); } responseHeaders = info.getAllHeaders(); }
onReadCompleted()
응답 본문의 일부를 읽을 때마다 호출됩니다. 다음 코드는 다음 예는 메서드를 구현하고 응답 본문을 추출하는 방법을 보여줍니다.
Kotlin
override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { // The response body is available, process byteBuffer. ... // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer?.clear() request?.read(myBuffer) }
자바
@Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { // The response body is available, process byteBuffer. … // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer.clear(); request.read(myBuffer); }
onSucceeded()
네트워크 요청이 성공적으로 완료되면 호출됩니다. 다음 예는 메서드를 구현하는 방법을 보여줍니다.
Kotlin
override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) { // The request has completed successfully. }
자바
@Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { // The request has completed successfully. }
onFailed()
다음 날짜 이후에 어떤 이유로든 요청이 실패하면 호출됩니다.
start()
메서드가 호출되었습니다. 이 다음 예는 메서드를 구현하고 오류:Kotlin
override fun onFailed(request: UrlRequest?, info: UrlResponseInfo?, error: CronetException?) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error) }
자바
@Override public void onFailed(UrlRequest request, UrlResponseInfo info, CronetException error) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error); }
onCanceled()
다음을 사용하여 요청이 취소된 경우 호출됩니다.
cancel()
메서드를 사용하여 지도 가장자리에 패딩을 추가할 수 있습니다. 일단 호출하면 다른 메서드를UrlRequest.Callback
클래스는 호출됩니다. 이 메서드를 사용하여 특정 작업을 처리하기 위해 할당된 리소스를 합니다. 다음 예에서는 메서드를 구현하는 방법을 보여줍니다.Kotlin
override fun onCanceled(request: UrlRequest?, info: UrlResponseInfo?) { // Free resources allocated to process this request. ... }
Java
@Override public void onCanceled(UrlRequest request, UrlResponseInfo info) { // Free resources allocated to process this request. … }