안드로이드 지식 습득 및 정리

3655 단어 유틸리티
Thread,MessageQueue,Message,Looper,Handler 관계 및 주의해야 할 점
  • 안드로이드는 Thread 중 하나에 Looper가 있고 Looper는 MessageQueue를 제공합니다.Thread에 MessageQueue만 있으면 다른 라인에 Message를 추가할 수 있습니다.Looper.prepare(),Looper.loop(),Looper.release(). 스스로 이루고 싶지 않으면HandlerThread를 사용하면 Looper를 직접 관리하지 않고 봉인할 수 있다.Handler send Message는 Message를Queue에 들어갑니다. Message는Queue에 들어가기 전에 target을 현재handler에 연결합니다.Looper에서 해당 메시지를 폴링하면 메시지가 호출됩니다.target.dispatchmessage. 따라서Activity에서handler를 사용할 때handler에서 activity를 사용하는 것이 있으면handler가 풀리지 않았을 때activity는 풀리지 않을 수 있습니다. 예를 들어 인터넷 요청이 돌아오지 않고 페이지가 닫혔을 때activity는 즉시 풀리지 않아 메모리 유출이 발생할 수 있습니다.해결 방법은handler의activity를 소프트 인용으로 설정하는 것입니다.

  • 안드로이드 시스템 아키텍처
  • 안드로이드 시스템 구조는 4층으로 나뉜다.Linux 커널 레이어, Library Android runtime, Application framework, Application 레이어
  • 아래쪽에는 Linux 커널이 제공됩니다.Library Android runtime은 C++ 및 C를 사용하여 작성되었습니다.응용 프레임워크층에 서비스를 제공하다.예를 들어 멀티미디어, 브라우저, 데이터베이스, 도형 엔진 등의 실현은 모두 이 층에 있다.
  • 응용 프레임워크 층은 응용 층에 API, UI 컨트롤러와 중요한 메커니즘을 제공한다. 이런 메커니즘은 복용할 수 있는 구성 요소를 제공하고 응용 프로그램의 개발 규범을 제공하며 응용 층과 밑바닥 상호작용의 복잡성을 차단한다.기본 구성 요소 포함:
  • 1. View System은 일련의 확장 가능한 UI 컨트롤을 제공합니다. List, Grid, Button, 웹 브라우저 등... 2. Resource Manager는 비코드 자원에 대한 접근 인터페이스를 제공합니다. 예를 들어 그림, String, 레이아웃 파일 등입니다. 3. Window Manager는 모든 창 프로그램을 관리합니다. 4, Content Provider는 응용 프로그램 간의 데이터 공유 인터페이스를 제공합니다. 5,Notification Manager 상태 표시줄에는 애플리케이션 라이프 사이클을 관리하고 일관된 내비게이션 예비(fallback) 기능을 제공하기 위한 사용자 정의 정보가 표시됩니다.7. Package Manager 안드로이드 애플리케이션 설치 패키지 관리 인터페이스 8, Telephone Manager, Loaction Manager 등
  • 어플리케이션 레이어가 Activity, Servince, Content Provider, BroadCast 4대 어셈블리
  • 로 압축됨
    메모리 유출 및 메모리 오버플로우
  • 메모리 오버플로우는 소프트웨어가 실행될 때 필요한 메모리가 최대 메모리를 초과하여 메모리가 부족하다는 것을 말한다.
  • 메모리 유출은 방출할 때 제때에 메모리를 방출하지 않은 것이다
  • 메모리 최적화: 안드로이드에서 메모리가 넘치기 쉬운 부분은 바로 그림의 불러오기입니다. 우리는 그림의 압축과 LruCache 캐시를 사용하는 목적을 사용하여 그림이 사용할 수 있는 메모리를 제어할 수 있습니다.비트 맵, 파일 읽기, 데이터베이스 등 소모 자원의 신속한 방출가능한 한 메모리 유출을 줄이다.앞서 말했듯이handler는 메모리 유출에 대한 경고를 할 수 있으며, 해결 방법은 소프트 인용을 사용하는 것이다.

  • 내가 사용하는 네트워크 요청의 발전
  • thread를 사용하여 httpClient를 직접 사용하여 네트워크 요청
  • AsyncTask 를 사용합니다.AsyncTask 하부의 실현, 예를 들어 직렬인지 병렬인지는 서로 다른 버전에서 다르고 그 내부도 Thread와handler로 봉인되었다.거의 사용하지 않음
  • 스레드 탱크를 사용하고 스레드 탱크를 최대 5개의 스레드로 설치하여 동시에 운행한다.
  • HttpClient를 사용하지 않습니다.Volley, Retrofit 등의 타사 프레임워크를 사용합니다.HttpUrlConnetion 또는 OKHttp을 사용하여 HttpClient를 대체할 수 있습니다.

  • Android는 SharedPreferences로 데이터를 저장합니다. 크기 제한이 있습니까?
  • 경량급.Shared Refrences에 저장된 데이터는 사실 파일에 저장된 (XML)입니다. 경량급입니다. 데이터를 저장할 때 데이터의 양이 너무 많으면commit()의 시간이 너무 길어서 메인 라인을 방해할 수 있기 때문에sharedpreferences는 경량급이고 여러 번 제출하는 것이 아니라 한 번에 제출하는 것을 추천합니다.(개인적인 추측... 정확한지 모르겠음)
  • Assets와 Raw의 동일성과 차이점
  • 양자 디렉터리에 있는 파일은 포장된 후에 apk 패키지에 그대로 저장되며 2진법으로 컴파일되지 않습니다.
  • res/raw의 파일은 R.java 파일에 비치며 접근할 때 자원 ID인 R.id.filename을 직접 사용합니다.assets 폴더 아래의 파일은 R.java에 비치지 않으며, 접근할 때 AssetManager 클래스가 필요합니다.
  • res/raw는 디렉터리 구조가 있을 수 없고, assets는 디렉터리 구조가 있을 수 있으며, 즉assets 디렉터리에서 폴더를 다시 만들 수 있다.
  • 1.  res/raw      ,                 
    
    ·        InputStream is =getResources().openRawResource(R.id.filename);  
    
    2.  assets      ,                 
    
    ·        AssetManager am = null;  
    
    ·        am = getAssets();  
    
    ·        InputStream is = am.open("filename");  

    좋은 웹페이지 즐겨찾기