>웹 프론트엔드 >프런트엔드 Q&A >Android 면접 질문: 네 가지 주요 구성 요소

Android 면접 질문: 네 가지 주요 구성 요소

藏色散人
藏色散人앞으로
2020-07-31 14:27:084632검색

추천: "2020 Android 면접 문제 모음 [컬렉션] "

Android 면접 문제(4대 구성 요소)

Window, Process, Thread

Android 면접 문제(데이터 저장, 보기)

Activity


Q: 액티비티의 수명주기에 대해 알려주세요.


Q: onStart()와 onResume()/onPause() 및 onStop()의 차이점은 무엇인가요?

포그라운드에 있는지와 사용자에게 표시되는지의 차이


Q: 활동 A가 다른 활동 B를 시작할 때 어떤 메서드가 다시 호출되나요? 활동 B가 완전히 투명하다면 어떻게 될까요? Dialog가 시작되면 어떻게 되나요?

A는 onPause()>>onStop()을 다시 호출하고, transparent는 onStop()을 호출하지 않으며, 대화 상자는 onPause() 및 onStop()을 호출하지 않습니다.


Q: onSaveInstanceState()에 대해 이야기해 보세요. 방법? 언제 호출되나요?

이 메서드는 Activity가 실수로 삭제된 후 다시 생성될 때 호출됩니다. 예를 들어 가로 화면과 세로 화면 사이를 전환하면 onSaveInstanceState() 메서드가 onStop()보다 먼저 호출됩니다. 현재 활동의 상태를 저장합니다. 활동이 재생성된 후 onRestoreInstanceState()가 호출되어 활동의 상태를 복원합니다. onStart()가 호출됩니다.


Q: onSaveInstanceState()와 onPause()의 차이점은 무엇인가요?

두 가지가 실행되는 정해진 순서는 없습니다.

onsavedinstance(Bundle saveinstancestate) 방법의 트리거 타이밍은 일반적인 시나리오는 홈 버튼을 누르거나 활동을 전환하는 것입니다. 그러나 프로그램을 종료하기 위해 뒤로 버튼을 누르면 이 방법은 삭제되지 않습니다. 일부 비영구적 데이터(즉, 프로그램이 실행되는 동안 저장해야 하는 데이터)를 저장하는 데 적합합니다.

Onpause()는 프로그램을 파괴하든 종료하든 반드시 호출해야 합니다. 영구 데이터를 저장하는 데 적합하지만 Android 자체에서는 이 메서드에 대한 번들 매개변수를 제공하지 않으므로 정적 변수를 만들거나 제공하도록 선택할 수 있습니다. 데이터 매체로서의 sharedpreference.

Q: 구성 변경 시 활동 재구축을 방지하는 방법은 무엇입니까?

매니페스트 파일에 각 활동을 등록할 때

android:configChanges="XXX"

라고 작성하세요. 예를 들어 가로 화면과 세로 화면 간 전환: android:configChanges="orientation"

Q: 우선순위가 낮은 활동 메모리가 부족합니다. 재활용한 후 파기 전 상태로 복원하려면 어떻게 해야 하나요?

1. 앱이 백그라운드에 있고 시스템에 의해 재활용되면 앱의 프로세스가 종료되고 활동도 재활용되며 앱의 작업 및 활동 스택과 해당 인텐트 및 데이터가 시스템에 저장됩니다. 앱이 다시 포그라운드로 전환되면 시스템은 작업 및 활동 스택과 해당 인텐트 및 데이터를 복원합니다.
2. Application 클래스와 전역 싱글톤 클래스에 데이터를 저장하지 마세요. 이렇게 하면 앱이 상태를 올바르게 복원할 수 없게 됩니다. 런타임 중 임시 데이터는 SharedPreference, 임시 파일 또는 데이터베이스에 저장되어야 합니다.
3 활동 간에 데이터를 전송하려면 시스템에서 제공하는 인텐트 메커니즘을 사용해야 합니다.

Q: 활동의 네 가지 시작 모드에 대해 알려주세요. (때때로 반환 스택의 Activity 상황을 분석하기 위해 실용적인 질문이 발생할 수도 있습니다)

https://blog.csdn.net/mountain_hua/article/details/81481242


Q: SingleTop과 SingleTop의 차이점에 대해 이야기해 보겠습니다. SingleTask 및 해당 애플리케이션 시나리오

Stack top 재사용: Activity를 반복적으로 여는 문제를 해결합니다.

스택 내 재사용: 작업 스택이 다음과 같이 다른 프로그램의 활동을 호출하려고 할 때:


Q: onNewIntent()는 언제 호출됩니까?

singleTop 및 SingleTask 모드에서는 해당 Activity가 있고 해당 Activity의 onNewIntent()가 호출됩니다.


Q: 활동 시작 모드의 플래그는 무엇입니까?

Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//AndroidManifest.xml에서 android:launchMode "singleTask"를 지정하는 것과 동일한 효과를 갖는 SingleTask 모드를 지정합니다

Intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//지정 SingleTop 모드는 AndroidManifest에서 android: launchMode "singleTop"을 지정하는 것과 동일한 효과를 갖습니다. 일반적으로 SingleTask 모드

Intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
//Activity와 함께 스택에서 꺼내야 합니다. 이 플래그는 기록 활동 목록에 표시되지 않으며 AndroidManifest.xml에 지정하는 것과 같습니다. android:excludeFromRecents="true"
플래그 비트의 우선순위는 AndroidManifest


Q: 방법에 지정된 우선순위보다 높습니다. 다른 애플리케이션의 활동을 시작하시겠습니까?

SingleTask와 taskAfiinity를 함께 사용합니다

Q: 활동 시작 프로세스는 무엇인가요?

https://www.jianshu.com/p/9ecea420eb52

Fragment


Q: Fragment의 수명 주기에 대해 이야기해 주세요.

다음 그림은 Fragment와 Activity 수명주기의 관계를 매우 잘 설명합니다.

Q: Activity와 Fragment의 유사점과 차이점은 무엇입니까?

1. 기본부터 시작하겠습니다 ---> 라이프 사이클

액티비티에는 7개의 라이프 사이클이 있습니다: onCreate(); onResume(); onStop(); ;

Fragment에는 11개의 수명주기가 있습니다: onCreateView(); onResume(); onDestroy(); ();

Fragment는 Activity보다 더 유연합니다. 수명 주기가 많을수록 제어할 수 있는 장소가 더 많기 때문입니다.

2. 유연성 측면에서

Activity는 각 페이지의 전달자입니다. Fragment의 표시는 Fragment의 수명 주기에서 이해할 수 있습니다.

Fragment는 하나씩 작은 조각입니다.

1) Activity에 비해 더 유연하며 XML 파일에 직접 작성하거나 Activity에 동적으로 추가할 수 있습니다. 2) show()/를 사용할 수 있습니다. hide() 또는 replacement()는 언제든지 프래그먼트를 전환할 수 있으며 전환 시 뚜렷한 효과는 없으며 활동도 전환할 수 있지만 전환 시 확실한 페이지 넘기기 또는 기타 효과가 있습니다. Activity 사이에 콘텐츠의 작은 부분을 전환하면 사용자에게 효과가 별로 좋지 않습니다

Q: Activity와 Fragment의 관계는 무엇인가요?

Fragment의 표시는 Activity에 따라 달라지며 이는 Fragment의 수명 주기를 통해 이해할 수 있습니다.

Q: 언제 Fragment 사용을 고려하시겠습니까?


WeChat 아래의 메뉴 표시줄과 유사하며 휴대폰 및 태블릿 적응 등도 있습니다.

Service

Q: 서비스의 수명주기에 대해 이야기해 주세요.


https://www.cnblogs.com/huihuizhang/p/7623760.html

Q: 서비스 시작 방법 2가지가 무엇인가요? 차이점은 무엇입니까?


start는 직접 시작되고 바인딩은 현재 활동에 바인딩됩니다.

Q: Activty가 서비스를 시작한 후 바인딩될 때 어떤 메서드가 다시 호출되나요? 이때 Service의 destroy() 메소드를 콜백하려면 어떻게 해야 합니까?


서비스가 시작되고 다시 바인딩되면 서비스는 항상 백그라운드에서 실행됩니다. 그리고 어떻게 호출되든 onCreate는 항상 한 번만 호출됩니다. 즉, startService가 호출되는 횟수에 따라 Service의 onStart가 호출되는 횟수만큼 호출됩니다. unbindService를 호출해도 서비스는 중지되지 않지만 서비스를 중지하려면 stopService 또는 서비스의 stopSelf를 호출해야 합니다.

Q: 서비스는 활동과 어떻게 통신하나요?


Activity는 서비스 개체에 대한 참조를 얻기 위해 BindService(Intent 서비스, ServiceConnection conn, int 플래그) 메서드를 호출하므로 Activity가 서비스에서 해당 메서드를 직접 호출할 수 있습니다. 콜백 방식을 사용할 수 있습니다
  1. Service에서 Activity로 메시지를 보낼 때 Broadcast를 사용할 수 있습니다. 물론 Activity에서는 해당 수신자를 등록해야 합니다. 예를 들어 서비스가 동일한 메시지를 여러 활동에 보내고 싶다면 이 방법을 사용하는 것이 좋습니다

Q: 어떤 시스템 서비스를 사용해 보셨나요?

https://blog.csdn.net/geyunfei_/article/details/78851024

Q: 서비스에서 시간이 많이 걸리는 작업을 수행할 수 있나요? 필요한 경우 어떻게 할 수 있나요?


서비스는 메인 스레드에서 실행됩니다. 일반적으로 시간이 많이 걸리는 작업은 서비스에서 수행할 수 없습니다. 필요한 경우 원격 서비스를 사용하여 새 프로세스를 시작할 수 있습니다.

Q: AlarmManager는 어떻게 타이밍을 구현할 수 있나요?


AlarmManager는 시스템 알람 서비스에 대한 액세스를 제공합니다. 이를 통해 향후 특정 시점에 애플리케이션을 실행할 수 있습니다. 경고가 울리면 시스템은 등록된 인텐트를 브로드캐스트하고 아직 실행 중이 아닌 경우 대상 애플리케이션을 자동으로 시작합니다. 등록된 알람은 장치가 절전 모드인 동안 유지되지만(이 기간 동안 장치가 오작동하는 경우 깨울 수 있는 옵션 포함) 장치를 끄고 다시 시작하면 지워집니다. 알람 관리자는 알람 수신기의 onReceive() 메서드가 실행되는 동안 CPU wake lock을 유지합니다. 이렇게 하면 브로드캐스트를 처리할 때까지 전화기가 절전 모드로 전환되지 않습니다. onReceive()가 반환되면 알람 관리자는 이 wake lock을 해제합니다. 이는 어떤 경우에는 onReceive() 메서드가 완료되자마자 전화기가 절전 모드 상태가 된다는 것을 의미합니다. 경고 수신자가 Context.startService()를 호출하면 요청된 서비스를 시작하기 전에 전화기가 절전 모드로 전환될 수 있습니다. 이러한 일이 발생하지 않도록 하려면 BroadcastReceiver 및 서비스에서 서비스를 사용할 수 있을 때까지 전화기가 계속 실행되도록 별도의 wake lock 정책을 구현해야 합니다.


Q: 프론트 데스크 서비스는 무엇인가요? 일반 서비스와 어떻게 다른가요? 프론트 데스크 서비스를 시작하는 방법은 무엇입니까?

포그라운드 서비스는 사용자에게 보이는 서비스이며, 알림 형태로 생성될 수 있습니다


Q: ActivityManagerService와 어떤 역할을 하는지 알고 계시나요?

ActivityManagerService(이하 AMS)는 Android의 핵심 서비스로 시스템의 4가지 주요 구성 요소의 시작, 전환, 스케줄링과 애플리케이션 프로세스의 관리 및 스케줄링을 주로 담당합니다. 운영 체제의 프로세스 관리 및 예약 모듈과 유사하므로 Android에서도 매우 중요합니다.


Q: 서비스가 종료되지 않도록 하는 방법은 무엇입니까?

onStartCommand 메소드는 onStartCommand方法中,返回<strong>START_STICKY</strong>

StartCommand()几个常量:

  • START_STICKY<br>START_STICKY<code>onStartCommand()方法,但并不会传递最后一次传递的intent,只是传递一个空的intent。除非存在将要传递来的intent,那么就会传递这些intent。这个适合播放器一类的服务,不需要执行命令,只需要独自运行,等待任务。
  • START_NOT_STICKY
    intent。这是最安全的选项,可以避免在不必要的时候运行服务。
  • START_REDELIVER_INTENT를 반환합니다. StartCommand()의 여러 상수:
    • START_STICKY onStartCommand()方法,传递最后一次传递的intent。其余存在的需要传递的intent会按顺序传递进来。这适合像下载一样的服务,立即恢复,积极执行。

    提升Service优先级

    前台服务是被认为用于已知的正在运行的服务,当系统需要释放内存时不会优先杀掉该进程。

    在onDestory()中发送广播开启自己

    service+broadcast方式,就是当service调用到ondestory() 시스템이 서비스를 다시 생성하고

    시스템은 전달해야 할 사항이 없으면 서비스를 다시 생성하지 않습니다

    시스템은 서비스를 다시 생성하고 onStartCommand() 메서드를 호출하여 마지막으로 전달된 intent를 전달합니다. 전달해야 하는 나머지 intent는 순서대로 전달됩니다. 이는 즉시 재개되고 공격적으로 수행되는 다운로드와 같은 서비스에 적합합니다.

Raise Service Priority

포그라운드 서비스는 시스템이 메모리를 해제해야 할 때 실행 중인 알려진 서비스에 사용되는 것으로 간주됩니다. 프로세스는 실행되지 않습니다. 먼저 죽었습니다.

onDestory()에서 브로드캐스트를 보내 직접 시작

service+broadcast 메소드, 즉 서비스가 ondestory()를 호출할 때 인 경우 맞춤 브로드캐스트를 보내고, 브로드캐스트가 수신되면 서비스를 다시 시작합니다. 물론 이 해법은 이론적으로는 가능하며, 결과를 실험하는 것도 가능하다. 그러나 어떤 경우에는 전송된 브로드캐스트가 메시지 큐에서 낮은 순위를 가지며 브로드캐스트를 수신하기 전에 서비스가 삭제될 수도 있습니다(단지 추측일 뿐입니다). 따라서 이 메커니즘이 완벽하게 작동하도록 하려면 두 개의 서비스를 시작하고, 서로 모니터링하고, 서로 시작할 수 있습니다. 서비스 A는 B의 브로드캐스트를 듣고 B를 시작하고, 서비스 B는 A의 브로드캐스트를 듣고 A를 시작합니다. 실험 후에 이 솔루션이 실현 가능해졌습니다.

Broadcast Receiver


Q: 방송 등록 양식 두 가지는 무엇입니까? 차이점은 무엇입니까?

Broadcast Receiver를 등록하는 방법에는 프로그램 내 동적 등록과 AndroidManifest 파일 내 정적 등록의 두 가지 방법이 있습니다.

동적으로 등록된 방송 수신기의 특징은 등록에 사용된 활동이 꺼지면 방송이 무효화된다는 것입니다. 정적 등록은 방송 수신기가 꺼져 있는지 걱정할 필요가 없습니다. 장치가 켜져 있으면 방송 수신기도 켜집니다. 즉, 앱 자체가 시작되지 않더라도 앱이 구독하는 방송이 실행되면 영향을 미치게 됩니다.

ContentProvider

Q: ContentProvider에 대해 얼마나 알고 있나요? 🎜 (1) 안드로이드 플랫폼은 애플리케이션의 지정된 데이터 세트를 다른 애플리케이션에 제공하기 위해 ContentProvider를 제공합니다. 다른 애플리케이션은 ContentResolver 클래스를 통해 이 콘텐츠 제공자로부터 데이터를 얻거나 저장할 수 있습니다. 🎜🎜(2) 콘텐츠 공급자는 여러 애플리케이션 간에 데이터를 공유해야 하는 경우에만 필요합니다. 예를 들어, 주소록 데이터는 여러 애플리케이션에서 사용되며 콘텐츠 제공자에 저장되어야 합니다. 이점은 데이터 액세스를 통합한다는 것입니다. 🎜🎜(3) ContentProvider는 데이터 공유를 구현합니다. ContentProvider는 데이터를 저장 및 획득하고 모든 애플리케이션에 표시하는 데 사용됩니다. Android는 모든 애플리케이션이 액세스할 수 있는 공통 저장 영역을 제공하지 않기 때문에 이는 서로 다른 애플리케이션 간에 데이터를 공유하는 유일한 방법입니다. 🎜🎜 (4) 개발자는 ContentProvider 클래스의 객체를 직접 사용하지 않습니다. 대부분 ContentResolver 객체를 통해 ContentProvider에 대한 작업을 구현합니다. 🎜🎜(5) ContentProvider는 URI를 사용하여 데이터 세트를 고유하게 식별합니다. 여기서 URI 앞에는 content://가 붙어 있어 데이터가 ContentProvider에 의해 관리됨을 나타냅니다. 🎜🎜 🎜🎜

위 내용은 Android 면접 질문: 네 가지 주요 구성 요소의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제