전체 글

전체 글

    링커

    # 링커 https://jhnyang.tistory.com/40?category=815411 • 프로그램은 여러 파일로 이루어진다. 링커가 없으면 한파일에 모든 프로그램소스를 담아야할 것이다. • 링커는 라이브러리 전체를 로드하지 않고, 필요한 부분만 로드한다. • 링커는 목적파일을 모아 실행파일로 만든다. 즉, “대부분의 컴파일러에서, 각각의 목적 파일은 하나의 입력 소스 코드 파일의 컴파일 결과이다. 한 프로그램이 여러 개의 목적 파일로 구성될 때, 링커는 이 파일들을 하나의 통합된 실행 가능한 프로그램으로 합치고 이때 생겨나는 기호들을 해결한다 (resolve).” resolve라는건, 링커가 기호를 해석하는 행위를 말하는 듯. # 목적파일(object file) • c++, java 스크립트를 컴..

    Service

    서비스는 시작된 어플리케이션과 같은 프로세스, 기본 스레드에서 실행된다. 하지만 서비스는 어플리케이션과는 별개의 앱처럼 동작한다. 즉, 사용자가 앱을 꺼도 서비스는 동작한다. 때문에 서비스를 멈춰주는건 프로그래머의 몫이다. 별개의 앱처럼 동작하면서도 앱의 구성요소들을 사용할 수 있는게 특징이다. 참고로 stopService는 서비스 중지를 요청할 뿐이지, 바로 멈추지는 않는다. 때문에 서비스를 사용하는 앱이나 컴포넌트가 여러개일때 A에서 stopService() -> B에서 startService() -> 서비스 중지 이렇게 되면 B의 startService요청은 묵살되기 때문에 (예상한건 A에서 stopService() -> B에서 startService() 였다) stopSelf(startId) 서비..

    Intent Flag

    # Intent flag FLAG_ACTIVITY_SINGLE_TOP 열고자 하는 액티비티가 이미 맨 위에 있으면 재활용한다. 스택이 이렇게 있을때 B A 누르면 B로가는 노티피케이션이 왔다치자. 그 노티피케이션을 눌렀을때 아무런 일도 일어나지 않는게 바람직하지만,(현재가 B니까) 실제로는 이렇게된다. B B A 만약 launchMode를 singletop으로하면 방지된다. singletop은 현재 열려는 액티비티가 이미 top에 있는지 확인하고, 있으면 다시 만들지 않는다. 그리고 onCreate대신에 onNewIntent를 부른다. FLAG_ACTIVITY_CLEAR_TOP 열고자하는 액티비티 위에 있는 액티비티를 클리어한다. A,B,C,D 에서 D가 B를 불렀을때 C,D가 없어지고 B가 맨앞으로 나..

    Permission

    매니페스트에 이렇게 써놓고 코드에서 이렇게 가져올 수 있다. PackageInfo packageInfo = packageManager.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);

    Dagger2 Scope

    # @Scope @Scope //스코프임을 알린다. @Retention(value = AnnotationRetention.RUNTIME) //이 주석은 런타임동안 유지된다. annotation class ActivityScope When a type is marked with a scope annotation, it can only be used by components that are annotated with the same scope. @Scope라고 붙인 타입은 같은 스코프를 가진 컴포넌트에서만 사용될 수 있다. When a component is marked with a scope annotation, it can only provide types with that annotation or ty..

    Widget, Element, RenderObject

    위젯은 UI의 config를 가지고있다. 엘레멘트는 위젯과 렌더오브젝트를 관리한다. (update를 관리) 렌더오브젝트는 실제로 UI를 그린다. 우리는 위젯을 선언적인 방식으로 작성하고, 실제로 UI의 라이프사이클을 관리하고 화면에 그리는건 각각 엘레멘트와 렌더오브젝트가 한다. 즉 우리가, 이 ‘컨테이너는 10만큼의 패딩을 가진 컨테이너야’ 라고 하면 플러터는 위젯에 대한 엘레멘트를 생성하고, 엘레멘트는 렌더오브젝트를 생성한다. 엘레멘트는 위젯과 렌더오브젝트 사이에서 둘에 대한 레퍼런스를 가지며 트리를 관리한다. 렌더오브젝트는 위젯을 참고하며 화면을 그린다. 심플하게 정의하면 이렇게된다. 위젯 - 엘레멘트 - 렌더오브젝트 Configuration for UI - lifecycle, WidgetTree M..

    [플러터] 상태관리 라이브러리들의 동작원리

    플러터의 상태관리 방법은 대표적으로 세가지가 있다. 1. bloc 2. provider 3. getX 흔히 이렇게 세가지로 분류하지만, 이 세가지를 구분하는건 의미가 없다. 왜냐하면 provider 나 getX나 결국은 bloc 패턴과 provider패턴을 구현하고 있기 때문이다. bloc은 그저 비지니스 로직을 담은 컴포넌트이므로 무엇이든 될 수 있다. 예를들어 Provider에서는 Notifier가 bloc이고, GetX에서는 GetXController가 bloc이라고 할 수 있다. # BLoC 패턴 BLoC stands for Business Logic Component. 블록패턴은 비지니스 로직 컴포넌트의 줄인말이다. Bloc 패턴의 목적은 비지니스 로직과 UI를 분리해서 유지보수하기 쉬운 앱을 ..

    스크롤 이벤트 처리하기 [ NotificationListener ]

    https://api.flutter.dev/flutter/widgets/NotificationListener-class.html 예제) NotificationListener( onNotification: (scrollNotification) { if (scrollNotification is ScrollStartNotification) { controller.pauseVideo(); } else if (scrollNotification is ScrollEndNotification) { controller.playVideo(); } return false; }, child: SingleChildScrollView( https://stackoverflow.com/questions/56071731/scrollc..