본문 바로가기

전체 글

(129)
[Android] Android 4대 구성요소: Activity, Service, BroadcastReceiver, ContentProvider 서비스 : 시간이 오래 걸리는 작업들은 백그라운드 서비스로 실행시켜야한다. 안드로이드 서비스는 액티비티에 종속되어있다. 따라서 별개의 thread가 아니라 main thread에서 실행된다. Activity와 달리 UI가 없는게 특징이다. 이때 안드로이드 서비스가 액티비티에 종속되어 메인 스레드에서 실행되기 때문에 서비스에서 deadlock이 걸리게 되면 메인 액티비티도 중지된다. 또는 서비스에서 오래 걸리는 작업을 별개의 thread에서 실행하지 않으면 메인 스레드의 UI 또한 중지되므로 os는 ANR 즉 android not responding 발생시켜 앱 프로세스가 강제종료된다. 요약하자면 서비스는 시간이 오래 걸리는 작업을 백그라운드에서 진행할 때 사용하는데 별개의 thread가 아닌 메인 스레드..
synchronization multi-threaded system에서는 shrared date를 사용하는 경우가 있다. 당연히 multi-process에서도 발생한다. 이 경우 실행 순서 조절과 동기화 처리는 필수이다. synchronization - shared resources - coordinate the execution order 만약 synchronization이 되어 있지 않다면 어떤일이 발생할까? race condition : concurrent thread/process들이 shared data에 경쟁적으로 접근하는 상황 -> context switch를 연산자 단위가 아니라 시간 단위로 나누어서 처리하기 때문에 instruction 순서가 변경되기 때문에 발생한다. 이러한 race condition은 non-de..
[Android] Notification, PendingIntent로 알림 활용하기 Notification 안드로이드의 알림서비스이다. 상단바에 보이는 것들이 알림인데 os가 관리하기 때문에 NotificationManager 시스템 서비스를 이용해서 os에게 넘긴다. 이때 알림을 눌렀을 때 어떤 action을 만들고 싶은 경우 pendingIntent 객체에 intent를 담아 시스템에서 대기하도록 해야한다. pendingIntent는 지정된 상황이 올 때까지 intent를 보관하고 있으므로 알림을 눌렀을 때 intent를 실행한다. 즉 intent를 PendingIntent 객체에 넣고 PendingIntent 객체를 Notification 객체에 넣고 NotificationManager에 Notification 객체를 등록하게 되면 시스템의 알림 서비스에 전달된다. 요약하면 다음과..
[오류일기] android pendingIntent IllegalArgumentException 안드로이드 12를 타겟팅 하는 수준에서는 pending intent의 flag를 immutable or mutable 둘 중 하나를 꼭 명시해야 한다. noti를 변경 가능한지 아닌지 명시해야함 noti의 Direct Reply Action을 사용한다면 flag를 mutable로 설정해야 한다. 예를 들면 이런식으로 flag를 두개를 동시에 설정할 수도 있다. Intent intent=new Intent(this,subActivity.class); PendingIntent pendingIntent=PendingIntent.getActivity(this,101,intent, PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_IMMUTABLE); 구글 공식 문서에..
process scheduling 앞에서 배운 process에서 cpu는 처리량을 늘리기 위해서 context switch를 한다고 했다. 즉 cpu는 running과 waiting의 2가지 상태가 번갈아가며 수행되는 것이다. 처리하려는 작업에 따라 cpu burst가 길 수도 있고, I/O burst가 길 수도 있다. cpu burst가 긴 경우가 cpu bound, I/O burst가 긴 경우 I/O bound이다. I/O burst의 예로는 동영상 재생, 문서 편집 등이 있다. 즉 사용자와 interactive한 것이다. cpu bound의 예로는 복잡한 수식 계산 등이 있다. 천문학 수식 계산 등등... 그럼 이 작업들을 어떻게 스케쥴링 해야할까? cpu scheduler ( = short-term scheduler) : read..
multi-thread programming 앞에서 배운 multi-process programming은 마냥 좋기만 할까? 딱히 그렇지도 않다. process process는 기본적으로 Heavy-weight이다. 즉 프로세스 1개를 만드는 것은 오버헤드가 크다. 왜냐하면 process는 가진 정보가 많기 때문이다. 프로세스들은 독립적인 memory space가 필요하다. 따라서 address space가 필요하다. 또한 os resource, accounting info, hardware execution state(pc, sp, register) 등등 이러한 자료구조들을 새로 다 만들어야 한다. 당연히 오버헤드가 클 수 밖에 없다. 따라서 fork() 등으로 process를 새로 생성하는 것은 costly, 즉 비용이 많이 든다. 또한 통신을..
[Android] AlertDialog, DatePickerDialog, TimePickerDialog: Dialog 모음 및 사용 AlertDialog class 일종의 사용자 대화창이라고 부르는데 나는 그냥 팝업 창이라고 부름 제목, 아이콘, 메세지, 목록, 버튼은 최대 3개까지 지원해준다. 사용법은 간단하다. 1. AlertDialog.Builder 객체 생성 2. 원하는 기능에 따라 - 제목: setTitle() - 아이콘: setIcon() - 메세지: setMessage() - 목록: setItems() - 버튼: setPositiveButton(),setNegativeButton() 으로 설정 3. AlertDialog.Builder 객체에 create() 메서드로 AlertDialog 객체를 생성 4. AlertDialog 객체에 show 메서드로 화면에 표시 alerttButton.setOnClickListener(n..
process concept process가 무엇인가? process는 프로그램 실행 흐름의 가장 기본적인 단위이다. 다들 이렇게 설명하는데 사실 뭔 소린지 이해가 안갈 수 있다. 그럴때는 프로그램 실행을 위한 작업의 대상, 즉 os가 scheduling하는 대상이라고 생각하면 쉽다. process - 프로그램의 실행 단위 - 프로그램 안에서 흐름을 제어하는 캡슐화 단위 - dynamic and active entity - 실행과 스케쥴링 단위 process address space process가 메모리에 저장되는 공간은 어디일까? memory의 구조는 낮은 주소부터 code, data, heap, dynamic으로 구성되어 있다. code: text segmentn로 기계어들이 저장되어 있다. data: 변하지 않는 static..