추천: "2020 Android 면접 문제 모음 [컬렉션] "
포그라운드에 있는지와 사용자에게 표시되는지의 차이
A는 onPause()>>onStop()을 다시 호출하고, transparent는 onStop()을 호출하지 않으며, 대화 상자는 onPause() 및 onStop()을 호출하지 않습니다.
이 메서드는 Activity가 실수로 삭제된 후 다시 생성될 때 호출됩니다. 예를 들어 가로 화면과 세로 화면 사이를 전환하면 onSaveInstanceState() 메서드가 onStop()보다 먼저 호출됩니다. 현재 활동의 상태를 저장합니다. 활동이 재생성된 후 onRestoreInstanceState()가 호출되어 활동의 상태를 복원합니다. onStart()가 호출됩니다.
두 가지가 실행되는 정해진 순서는 없습니다.
onsavedinstance(Bundle saveinstancestate) 방법의 트리거 타이밍은 일반적인 시나리오는 홈 버튼을 누르거나 활동을 전환하는 것입니다. 그러나 프로그램을 종료하기 위해 뒤로 버튼을 누르면 이 방법은 삭제되지 않습니다. 일부 비영구적 데이터(즉, 프로그램이 실행되는 동안 저장해야 하는 데이터)를 저장하는 데 적합합니다.
Onpause()는 프로그램을 파괴하든 종료하든 반드시 호출해야 합니다. 영구 데이터를 저장하는 데 적합하지만 Android 자체에서는 이 메서드에 대한 번들 매개변수를 제공하지 않으므로 정적 변수를 만들거나 제공하도록 선택할 수 있습니다. 데이터 매체로서의 sharedpreference.
매니페스트 파일에 각 활동을 등록할 때
android:configChanges="XXX"
라고 작성하세요. 예를 들어 가로 화면과 세로 화면 간 전환: android:configChanges="orientation"
1. 앱이 백그라운드에 있고 시스템에 의해 재활용되면 앱의 프로세스가 종료되고 활동도 재활용되며 앱의 작업 및 활동 스택과 해당 인텐트 및 데이터가 시스템에 저장됩니다. 앱이 다시 포그라운드로 전환되면 시스템은 작업 및 활동 스택과 해당 인텐트 및 데이터를 복원합니다.
2. Application 클래스와 전역 싱글톤 클래스에 데이터를 저장하지 마세요. 이렇게 하면 앱이 상태를 올바르게 복원할 수 없게 됩니다. 런타임 중 임시 데이터는 SharedPreference, 임시 파일 또는 데이터베이스에 저장되어야 합니다.
3 활동 간에 데이터를 전송하려면 시스템에서 제공하는 인텐트 메커니즘을 사용해야 합니다.
https://blog.csdn.net/mountain_hua/article/details/81481242
Stack top 재사용: Activity를 반복적으로 여는 문제를 해결합니다.
스택 내 재사용: 작업 스택이 다음과 같이 다른 프로그램의 활동을 호출하려고 할 때:
singleTop 및 SingleTask 모드에서는 해당 Activity가 있고 해당 Activity의 onNewIntent()가 호출됩니다.
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: 방법에 지정된 우선순위보다 높습니다. 다른 애플리케이션의 활동을 시작하시겠습니까?
Q: 활동 시작 프로세스는 무엇인가요?
다음 그림은 Fragment와 Activity 수명주기의 관계를 매우 잘 설명합니다.
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의 관계는 무엇인가요?
Q: 어떤 시스템 서비스를 사용해 보셨나요?
포그라운드 서비스는 사용자에게 보이는 서비스이며, 알림 형태로 생성될 수 있습니다
ActivityManagerService(이하 AMS)는 Android의 핵심 서비스로 시스템의 4가지 주요 구성 요소의 시작, 전환, 스케줄링과 애플리케이션 프로세스의 관리 및 스케줄링을 주로 담당합니다. 운영 체제의 프로세스 관리 및 예약 모듈과 유사하므로 Android에서도 매우 중요합니다.
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를 시작합니다. 실험 후에 이 솔루션이 실현 가능해졌습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!