WorkManager에서 suspend 함수 사용 시 두 번 호출 문제

반응형
728x170

1. 문제 현상

 

CoroutineWorker를 사용하는데

 

이 클래스 내부에서 suspend 함수를 호출하면

 

해당 suspend 함수를 완료하고 나서 다시 돌아오는 현상이 발생했다....

 

예를 들어 아래의 사진을 보면

 

 

doWork 함수 내에서 tartgetAlarmData를 collect하는데

 

이때 비동기 작업을 한다(suspend funtion)

 

그리고 해당 collect 내부에선 Activity를 띄우는데 

 

문제는 Activity를 닫고나서 다시 targetAlarmData를 collect한다

 

(ReceiverAlarmWork 클래스나 doWork 함수부터 시작하는게 아님, targetAlarmData를 collect하는 부분부터 시작함...)

300x250

2. 해결 방법

 

원하는 타이밍에 해당 workManager를 stop 시켜주면된다

 

하지만 특정 workManager를 지정하기 위해선 해당 workManager에 이름을 붙여줘야한다

 

enqueueUniqueWork("uniqueWorkName", ExistingWorkPolicy, OneTimeWorkRequest)

enqueueUniqueWork 함수를 사용해서 시작하려는 workManager에 이름을 붙일 수 있다

 

여기선 uniqueWorkName을 "onAlarmActivity"로 하였다

 

그리고 workManager는 onAlarmActivity를 열기 때문에 거기서 이 work를 cancel해주면 된다

 

아래의 함수를 onAlarmActivity의 onCreate()에서 호출하면 더 이상 ReceiverAlarmWorker가 동작하지 않는다

 

반응형

댓글()

안드로이드 특정 에뮬에서만 애드몹 안나올 때 해결!!!

반응형
728x170

진짜 간단한 방법을 찾았습니다...

 

단, 이 방법을 사용하면 100% 낫긴하는데 에뮬레이터에 저장한

 

설정, 데이터가 전부 날아가버리니 주의하시길 바랍니다;;;

 


1. 원인

 

그냥 컴퓨터의 VM으로 실행하는 에뮬레이터가 불안정해서 그렇습니다 ㅠㅠ

 

혹은 컴퓨터의 사양부족입니다.

 


2. 해결 방법

 

해결방법은 다음과 같습니다.

 

① 안드로이드 에뮬레터를 종료한다

 

만약 특별히 따로 만지지 않았다면 에뮬레이터에 대한 정보는 다음과 같은 장소에 저장됩니다.

 

② 아래의 장소에 가서 파일 삭제

 

C드라이브 -> 사용자 or User -> "현재 사용자명" 폴더 -> .android -> avd -> 자신이 현재 사용중인 에뮬 폴더

 

-> "userdata-qemu.img" 라는 이미지 파일을 삭제 

 

③ 에뮬레이터 재실행

 

사실 위 내용은 개발자라면 정기적으로 해주는 것도 좋습니다.

 

새로운 앱을 계속 만들어서 실행하다보면 데이터가 에뮬 내부에 계속 쌓이거든요


3. 결론

 

저는 이렇게 해서 해결을 했습니다.

300x250

그리고 의외로 이 방법으로 해결되는 게 엄청 많습니다.

 

저는 UI isn't responding 같은 에러도 이거로 해결했습니다 ㅡㅡ;;

 

코드는 거의 별 차이없는데 어제까지는 잘 됐는데 or 아까까지는 잘 됐는데... 갑자기 안된다?

 

이 방법을 한번 실시해 보시길 바랍니다.

반응형

댓글()

안드로이드 System UI isn't responding 100% 해결법

반응형
728x170

진짜 간단한 방법을 찾았습니다...

 

단, 이 방법을 사용하면 100% 낫긴하는데 에뮬레이터에 저장한

 

설정, 데이터가 전부 날아가버리니 주의하시길 바랍니다;;;


1. 원인

 

제가 원인을 조금 찾아봤는데요

 

보니까 컴퓨터 성능 문제가 제일 크다고 하더라고요

 

남은 하드 용량, 전반적인 컴퓨터 성능(CPU, GPU, RAM 등등), 에뮬에 할당한 메모리 용량 등이

 

가장 큰 원인이라고 했습니다.

 

즉, 컴퓨터가 에뮬을 가상머신으로 돌리는데 성능이 좀 딸린다는게 원인이라는거죠...

 

(자연스럽게 컴퓨터 바꾸시면 해결.....)


2. 해결 방법

 

해결방법은 다음과 같습니다.

 

① 안드로이드 에뮬레터를 종료한다

 

만약 특별히 따로 만지지 않았다면 에뮬레이터에 대한 정보는 다음과 같은 장소에 저장됩니다.

 

② 아래의 장소에 가서 파일 삭제

 

C드라이브 -> 사용자 or User -> "현재 사용자명" 폴더 -> .android -> avd -> 자신이 현재 사용중인 에뮬 폴더-> "userdata-qemu.img" 라는 이미지 파일을 삭제 

 

③ 에뮬레이터 재실행

 

사실 위 내용은 개발자라면 정기적으로 해주는 것도 좋습니다.

새로운 앱을 계속 만들어서 실행하다보면 데이터가 에뮬 내부에 계속 쌓이거든요

300x250

3. 결론

 

저는 이렇게 해서 해결을 했습니다.

 

그리고 의외로 이 방법으로 해결되는 게 엄청 많습니다.

 

저 같은 경우 특정 에뮬에서만 애드몹 광고가 안떳는데 이걸 쓰니 해결됨 ㅡㅡ;;

 

코드는 거의 별 차이없는데 어제까지는 잘 됐는데 or 아까까지는 잘 됐는데... 갑자기 안된다?

 

이 방법을 한번 실시해 보시길 바랍니다.

반응형

댓글()

모든 해결법! The emulator process for AVD Pixel_4_API_30 was killed -1

반응형
728x170

정말 이거 고친다고 개고생했습니다..

 

이상하게 뭔 보안 문제인지 회사 컴에는 안드로이드 에뮬 실행이 안되더군요

 

개빡치는 안드로이드 에러들

 

그래서 3일간 인터넷을 뒤졌는데 해결하지 못했다가

 

갑자기 어느 웹사이트에서 힌트를 얻어서 해결하였습니다.

 

 


1. 안드로이드 에뮬레이터가 안되는 원인

 

일단 에뮬레이터가 안되는 원인이 뭘까요?

 

기본적으로 안드로이드 에뮬은 CPU에서 가상으로 기기를 만들고 그것을 실행합니다.

 

그게 안드로이드 스튜디오에서 에뮬레이터를 실행했을 때 우리들에게 보이는 결과입니다.

 

그럼 결국 에뮬레이터를 가상화하는 단계에서 뭔가 문제가 발생한거겠죠?

300x250

일단 아래의 내용을 전부 한번 해보시길 바랍니다.


2. 메인보드에 가상화 기능이 OFF 되있는거 아닐까?

 

애초에 이 기능이 없는 컴퓨터의 경우 에뮬레이터를 실행할 수 없습니다....

 

그래서 프로그래밍도 어느정도 성능이 되는 컴터로 사시길 바랍니다 ㅠ

 

아래는 각 제조사별 메인보드 가상화 기능 On 방법입니다.

 


일반 조립 PC용 메인보드 설정 방법


기가바이트 H811M-S2PV 및 해당 바이오스를 사용하는 모델들

설정 변경 후 저장해야 합니다.


삼성 DB-P150 포함 해당 모델 바이오스를 사용하는 PC들

CPU 가상화 기술 (VTx) 사용함으로 변경 후 F10번을 눌러 저장해 주세요.


LG에서 출시한 모델 중 해당 바이오스를 사용하는 PC들

해당 항목에서 찾을 수 있습니다.


HP EliteDesk800 G4 /HP ProoBook /HP ProDesk 모델 VT 설정


15-R113TU를 포함한 HP NoteBook 모델 (15인치 이상 모델들 다수 포함)

HP 데스크톱 구 모델 중 2세대 ~ 3세대 CPU를 사용하는 메인보드들

이 모델은 VTx 가 위 항목에 포함되어 있습니다.


HP ALL-IN-ONE PC 모델들 (20-C210KR 포함)-수정후 저장해야 합니다.

해당 모델은 위와 같은 방법으로 찾을 수 있으며, 설정 변경 후 F10을 눌러 적용해야 합니다.

HP ProBook 6560b 모델 외 구 모델 다수 포함 (노트북 구 2세대 ~3세대 CPU를 사용하는 모델)

해당 모델은 위 두 가지 항목에 체크가 되어야 합니다.


HP EliteBook 850 G3 포함한 기업용 노트북 모델들 포함 (6세대~7세대 제품들)

Advancd -> System Options으로 이동합니다.

해당 항목 중간에 Vritualization Technology (VTx)를 활성화시켜준 후 저장합니다.


Dell Latitude E7240 Ultrabook 및 해당 바이오스를 지원하는 제품들


AM4 라이젠 CPU를 지원하는 신형 메인보드 (MSI B350M PRO-VD PLUS 외 다수 모델)

OC 항목에 CPU Features를 선택합니다.

항목으로 진입하면 SVM Mode 항목을 Enabled로 변경 후 저장해야 합니다.

Asrock Z77 메인보드

Advanced -> CPU Configuration

Intel Virtualization Technology ->Enable


삼성 2014년 이전 PC 제품들

 

바이오스 설정에 들어갔는데 위와 같은 설정이 보이지 않는다면....?

 

CPU 자체에서 가상머신을 지원하지 않을 가능성이 매우 높습니다....ㅠ

 

이 이후의 방법은 다음 블로그에서 쓰겠습니다.

 


2편입니다!!

 

 

The emulator process for AVD Pixel_4_API_30 was killed -2

The emulator process for AVD Pixel_4_API_30 was killed -2에 대한 두 번째 글입니다! 1편에서는 단순히 컴퓨터 CPU의 가상화 기능을 ON 하는 기능을 알아봤습니다. 1편 블로그 - 컴퓨터 CPU의 가상화 기능 ON하..

mmol.tistory.com

 

반응형

댓글()