ホームページ  >  記事  >  ウェブフロントエンド  >  Android の面接での質問: 4 つの主要な要素

Android の面接での質問: 4 つの主要な要素

藏色散人
藏色散人転載
2020-07-31 14:27:084576ブラウズ

おすすめ: 「2020 Android 面接の質問まとめ [コレクション]

Android 面接の質問 (4 つの主要なコンポーネント)

ウィンドウ、プロセス、スレッド記事

Android インタビューの質問 (データ ストレージ、記事を表示)

#アクティビティ

Q: 教えてくださいアクティビティのライフサイクルについて教えてください。


Q: onStart() と onResume()/onPause() と onStop() の違いは何ですか?


それがフォアグラウンドにあるか、ユーザーに表示されるかどうかの違い

Q: アクティビティ A が別のアクティビティ B を開始するときに、どのメソッドが呼び戻されますか?アクティビティ B が完全に透明な場合はどうなるでしょうか?ダイアログが開始されたらどうなるでしょうか?

#A は onPause()>>onStop() をコールバックし、transparent は onStop() をコールせず、ダイアログ ボックスは onPause() と onStop() をコールしません

Q: onSaveInstanceState() メソッドについて話しますか?いつ呼ばれますか?

このメソッドは、アクティビティが誤って破棄され、その後再作成されたときに呼び出されます。たとえば、水平画面と垂直画面を切り替えると、アクティビティが再作成されます。onSaveInstanceState() メソッドは、前に呼び出されます。 onStop() は、現在のアクティビティの状態を保存します。アクティビティが再作成されると、onRestoreInstanceState() が呼び出され、アクティビティの状態が復元されます。onRestoreInstanceState() は、onStart() の前に呼び出されます。

Q: onSaveInstanceState() と onPause() の違いは何ですか?

これら 2 つが実行される固定順序はありません。

onsavedinstance (Savedinstancestate のバンドル) メソッドのトリガー タイミング。一般的なシナリオは、ホーム ボタンを押すか、アクティビティを切り替えることです。そのようなアクティビティは破棄される可能性があります。ただし、戻るボタンを押してプログラムを終了すると、これはメソッドは呼び出されません。これは、一部の非永続データ (つまり、プログラムの実行中に保存する必要があるデータ) を保存するのに適しています。

Onpause() は、プログラムを破棄するか終了するかに関係なく呼び出す必要があります。これは永続的なデータの保存に適しています。ただし、Android 自体はこのメソッドのバンドル パラメータを提供していないため、静的変数、またはデータキャリアとして共有設定を提供します。

Q: 構成が変更されたときにアクティビティの再構築を回避するにはどうすればよいですか?

各アクティビティをマニフェストファイルに登録する場合は、

android:configChanges="XXX"

例: 横画面と縦画面の切り替え: android:configChanges=" orientation"

Q: メモリ不足によりリサイクルされた後、優先度の低いアクティビティを破棄前の状態に復元するにはどうすればよいですか?

1. アプリがバックグラウンドにあり、システムによってリサイクルされると、アプリのプロセスが強制終了され、アクティビティもリサイクルされ、アプリのタスクとアクティビティのスタック、および対応するインテントとデータが保存されます。システム。アプリがフォアグラウンドに戻ると、システムはタスクとアクティビティのスタック、および対応するインテントとデータを復元します。

2. アプリが状態を正しく復元できなくなるため、Application クラスとグローバル シングルトン クラスにデータを保存しないでください。実行時の一時データは、SharedPreference、一時ファイル、またはデータベースに保存する必要があります。

3 システムによって提供されるインテント メカニズムを、アクティビティ間でデータを転送するために使用する必要があります。



Q: Activity の 4 つの起動モードについて教えてください。 (リターンスタック内のアクティビティの状況を分析するために実際的な質問が生じる場合があります)

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

Q:singleTop と singleTask の違いとアプリケーション シナリオについて話しましょう

スタック トップの再利用: アクティビティを繰り返し開く問題を解決します。

スタック内再利用: タスク スタックが別のプログラムのアクティビティを呼び出したい場合、次のように:

Q: onNewIntent()呼び出し時間?

singleTop モードと singleTask モードを実行すると、対応するアクティビティが存在し、アクティビティの onNewIntent() が呼び出されます。

Q: アクティビティ起動モードのフラグ ビットは何ですか?

Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//singleTask モードを指定します。これは、AndroidManifest.xml で android:launchMode "singleTask" を指定するのと同じ効果があります。

Intent.addFlags (Intent .FLAG_ACTIVITY_SINGLE_TOP);
//singleTop モードを指定します。これは、AndroidManifest.xml で android:launchMode "singleTop" を指定するのと同じ効果があります。
Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//これはあります フラグが設定されたアクティビティが開始されると、それは同じタスクスタック内にあるため、その上のアクティビティがスタックからポップアウトされ、通常はシングルタスクモードと一緒に表示されます

Intent.addFlags (Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
// このフラグを持つアクティビティは、履歴アクティビティ リストに表示されません。AndroidManifest.xml で android: excludeFromRecents="true" を指定するのと同じです。
フラグ ビットの優先順位はAndroidManifest で指定された優先度よりも高い


Q: 他のアプリケーションのアクティビティを開始するにはどうすればよいですか?

SingleTask と taskAfiinity は一緒に使用されます


Q: アクティビティの起動プロセスは?

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


Fragment


Q: Fragment のライフサイクルについて話してください。

次の図は、フラグメントとアクティビティのライフ サイクルの関係を非常によく示しています

Q: アクティビティとフラグメントの類似点と相違点は何ですか?

1. 基本から始めましょう ---> ライフ サイクル

アクティビティには 7 つのライフ サイクルがあります: onCreate(); onStart(); onResume(); onPause(); onStop() ; onDestroy(); onRestart();

フラグメントには 11 のライフサイクルがあります: onAttach(); onCreate(); onCreateView(); onActivityCreate(); onStart(); onResume(); onPause (); onStop (); onDestroyView(); onDestroy(); onDetach();

つまり、ライフサイクルが多く、制御できる場所が増えるため、フラグメントはアクティビティよりも柔軟になります。

2. 柔軟性の観点

Activity は 4 つの主要コンポーネントの 1 つであり、各ページのキャリアです。1 つは 1 です。Fragment の表示は、Activity に依存します。フラグメントのサイクル中に知ることができます。

Fragment は 1 つずつ小さなフラグメントです

1) Activity に比べて柔軟性が高く、XML ファイルに直接記述することも、Activity に動的に追加することもできます。

2) show()/hide() または replace() を使用して、いつでもフラグメントを切り替えることができ、切り替え時に明らかな影響はなく、ユーザー エクスペリエンスが向上します。ただし、アクティビティも切り替えることができます。 , ただし、アクティビティを切り替えると、明らかなページめくりやその他の効果が生じます。コンテンツの一部を切り替えると、ユーザーに良い印象を与えません

Q: アクティビティとアクティビティの関係は何ですか?断片?

Fragment の表示は、Fragment のライフサイクルから理解できるアクティビティに依存します。

Q: Fragment の使用を検討するのはいつですか?

WeChat の下のメニュー バーと同様、携帯電話やタブレットへの対応など。

サービス

Q: しましょうサービスのライフサイクルについて話しますか?

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

Q: 2 つの起動方法は何ですか?サービス?違いは何ですか?

start は直接開始され、bound は現在のアクティビティにバインドされます。

Q: Activty が最初にサービスを開始した後、バインドされたときにどのメソッドが呼び戻されますか?この時点で Service の destroy() メソッドをコールバックするにはどうすればよいでしょうか?

サービスを開始して再度バインドすると、サービスは常にバックグラウンドで実行されます。そして、どのように呼び出されても、onCreate は常に 1 回だけ呼び出され、startService が呼び出された回数に応じて、Service の onStart が何度も呼び出されます。 unbindService を呼び出してもサービスは停止されませんが、サービスを停止するには stopService またはサービスの stopSelf を呼び出す必要があります。

#Q: サービスはアクティビティとどのように通信しますか?


アクティビティは、bindService (Intent service、ServiceConnection conn、int flags) メソッドを呼び出して Service オブジェクトへの参照を取得し、アクティビティが Service 内のメソッドを直接呼び出せるようにします。アクティブにアクティビティに通知する場合は、コールバック メソッド
  1. サービスを使用してアクティビティにメッセージを送信します。ブロードキャストを使用できます。もちろん、アクティビティは対応する受信者を登録する必要があります。たとえば、サービスが複数のアクティビティに同じメッセージを送信したい場合は、このメソッドを使用することをお勧めします。

Q: どのシステム サービスを使用したことがありますか?

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

Q: 時間のかかる処理は実行できますか?サービス中?操作中?必要に応じて何ができるでしょうか?


サービスはメイン スレッドで実行されます。通常、時間のかかる操作はサービスでは実行できません。必要に応じて、リモート サービスを使用して新しいプロセスを開始できます。

Q: AlarmManager はどのようにタイミングを実装できますか?


AlarmManager は、システム アラーム サービスへのアクセスを提供します。これらにより、将来のある時点でアプリケーションを実行できるようになります。アラートが鳴ると、システムは登録されたインテントをブロードキャストし、ターゲット アプリケーションがまだ実行されていない場合は自動的に起動します。登録されたアラームは、デバイスがスリープしている間は保持されます (この期間中にデバイスが誤動作した場合に起動するオプションあり) が、デバイスの電源をオフにして再起動するとクリアされます。アラーム マネージャーは、アラーム レシーバーの onReceive() メソッドが実行されている限り、CPU ウェイクロックを保持します。これにより、ブロードキャストが処理されるまで電話機はスリープ状態になりません。 onReceive() が返されると、アラーム マネージャーはこのウェイクロックを解放します。これは、場合によっては、onReceive() メソッドが完了するとすぐに電話機がスリープ状態になることを意味します。アラート受信者が Context.startService() を呼び出すと、要求されたサービスを開始する前に電話機がスリープ状態になる可能性があります。これを防ぐには、BroadcastReceiver とサービスで別のウェイクロック ポリシーを実装し、サービスが利用可能になるまで電話機が動作し続けるようにする必要があります。


Q: フロントサービスとは何ですか?通常のサービスと何が違うのですか?フロントサービスを始めるにはどうすればよいですか?

フォアグラウンド サービスは、ユーザーに表示されるサービスです。フォアグラウンド サービスは、通知の形式で作成できます。


Q: ActivityManagerService について理解していますか?また、それがどのような役割を果たしますか?

ActivityManagerService (以下、AMS) は Android の中核となるサービスで、主にシステム内の 4 つの主要コンポーネントの起動、切り替え、スケジューリング、およびアプリケーション プロセスの管理とスケジューリングを担当します。責任はオペレーティング システムのプロセスと同じです。管理モジュールとスケジュール モジュールは似ているため、Android では非常に重要です。


Q: サービスが強制終了されないようにするにはどうすればよいですか?

onStartCommandメソッドで、<strong>START_STICKY</strong>

#StartCommand()# を返します。 ##いくつかの定数:

  • START_STICKY システムはサービスを再作成し、
    onStartCommand() メソッドを呼び出しますが、最後に渡された intent は渡さず、空の intent のみを渡します。配信される intent がない限り、これらの intent が配信されます。これは、コマンドを実行する必要がなく、単独で実行してタスクを待つだけで済むプレーヤーなどのサービスに適しています。
  • START_NOT_STICKY 配信される
    インテントがない限り、システムはサービスを再作成しません。これは最も安全なオプションであり、不必要な場合にサービスが実行されるのを防ぎます。
  • START_REDELIVER_INTENT システムはサービスを再作成し、
    onStartCommand() メソッドを呼び出し、最後に渡された intent を渡します。渡す必要がある残りの intent が順番に渡されます。これは、すぐに再開され、積極的に実行されるダウンロードなどのサービスに適しています。

サービス優先度の向上

フォアグラウンド サービスは、既知の実行中のサービスに使用されると見なされ、システムがメモリを解放する必要があるときに最初に強制終了されません。プロセス。

onDestory() でブロードキャストを送信して、独自の

サービス ブロードキャスト メソッドを開きます。つまり、サービスが

ondestory() を呼び出すとき、カスタマイズされたブロードキャストを送信し、ブロードキャストを受信したらサービスを再起動します。もちろん、この解決策は理論的には実現可能であり、結果を実験することも可能です。ただし、場合によっては、送信されたブロードキャストがメッセージ キュー内で下位にランク付けされ、ブロードキャストを受信する前にサービスが破棄される可能性があります (単なる推測です)。したがって、このメカニズムを完全に機能させるには、2 つのサービスを開始し、相互に監視し、相互に開始することができます。サービス A は B のブロードキャストをリッスンして B を開始し、サービス B は A のブロードキャストをリッスンして A を開始します。実験の結果、この解決策は実行可能であることがわかりました。

ブロードキャスト レシーバー

Q: ブロードキャスト用の 2 つの登録フォームとは何ですか?違いは何ですか?

ブロードキャスト受信機の登録には、プログラムへの動的登録とAndroidManifestファイルへの静的登録の2つの方法があります。

動的に登録されたブロードキャスト受信機の特徴は、登録に使用されたアクティビティがオフになるとブロードキャストが無効になることです。静的登録では、放送受信機の電源が入っているかどうかを気にする必要がなく、機器の電源が入っていれば放送受信機の電源もオンになります。つまり、アプリ自体が起動していなくても、アプリがサブスクライブしたブロードキャストがトリガーされると影響を受けます。

ContentProvider

Q: ContentProvider についてどの程度知っていますか?

(1) Android プラットフォームは、アプリケーションの指定されたデータ セットを他のアプリケーションに提供する ContentProvider を提供します。他のアプリケーションは、ContentResolver クラスを通じてこのコンテンツ プロバイダーからデータを取得または保存できます。

(2) コンテンツ プロバイダーは、複数のアプリケーション間でデータを共有する必要がある場合にのみ必要です。たとえば、アドレス帳データは複数のアプリケーションで使用されるため、コンテンツ プロバイダーに保存する必要があります。その利点は、データへのアクセス方法を統一できることです。

(3) ContentProvider はデータ共有を実装します。 ContentProvider は、データを保存および取得し、すべてのアプリケーションから見えるようにするために使用されます。 Android はすべてのアプリケーションがアクセスできる共通のストレージ領域を提供していないため、これが異なるアプリケーション間でデータを共有する唯一の方法です。

(4) 開発者は ContentProvider クラスのオブジェクトを直接使用することはなく、ほとんどの場合、ContentResolver オブジェクトを通じて ContentProvider に対する操作を実装します。

(5) ContentProvider は、データ セットを一意に識別するために URI を使用します。ここでの URI には content:// という接頭辞が付けられ、データが ContentProvider によって管理されていることを示します。

以上がAndroid の面接での質問: 4 つの主要な要素の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。