Android Interview

Android application을 생성할 때 중요한 폴더 및 파일을 설명하라.

ValueDescription
src.java파일을 포함한다.
genCompiler가 자동으로 생성하는 Resource파일인 R.java 파일을 가지고 있다. 이 파일은 수정해서는 아니된다.
libraryandroid.jar 파일을 포함한다. 해당 Android application에 대한 library들이다.
assetsHTML, text, database등의 파일을 포함한다.
bin빌드 후 생성되는 .apk 파일을 포함한다.
resApplication에서 사용하는 리소스 파일들을 포함한다.

다음 AndroidManifest.xml 파일을 설명하라.

  • Package 이름(@string/app_name)을 포함한다.
  • Version code가 1이고 이는 어플리케이션의 version(몇 번째 release인지)을 나타낸다.
  • Version name이 1.0임을 알 수 있다.
  • android.minSdkVersion이 8이고 이는 이 어플리케이션이 실행될 수 있는 Android OS의 최소 version을 나타낸다.
  • MainActivity에 대한 activity 정보를 확인할 수 있다. Intent-filter를 통해 Main임을 확인할 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.careerride" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:name="com.example.careerride.MainActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

Activity에 대해 간단히 설명하라.

Activity는 User interface를 보여준다. Android application 생성 시 하나의 activity가 생성되며, 기본 이름은 MainActivity이며 맘대로 이름을 붙일 수 있다.

기본적으로 Activity class를 상속받는다.

Android Application은 0개 이상의 Activity를 가질 수 있으며 사용자와의 interaction을 위해 사용한다.

Activity는 onCreate()로 시작하여 onDestroy()로 끝나는 Lifecycle을 가지고 있다.

packagecom.example.careerride; //Application name careerride
importandroid.os.Bundle; // Default packages
importandroid.app.Activity; // Default packages
importandroid.view.Menu;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
publicbooleanonCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

Android Architecture의 key component는 무엇인가?

  • Linux Kernel
  • Libraries
  • Android Framework
  • Android Applications

Intent에 대해 설명하라.

Android의 기본 구성요소(Component)에는 Acivity, Service, ContentProvider, BroadcastReceiver 네 가지가 있는데 이 중 Activity, Service, BroadcastReceiver 사이에 data를 주고 받기 위해 intent를 사용한다.

다른 activity를 호출하거나 service를 시작하거나 broadcast할 수 있다.

Intent는 명시적 intent와 암시적 intent 두 가지로 나눌 수 있다.

명시적 intent는 intent를 전달할 class 정보를 포함한다.

Intent intent = newIntent (this, SecondActivity.class);
startActivity(intent);

암시적 intent는 동작을 원하는 값을 action값으로 하여 URI, MIME type, category 등과 함께 던지면 Android system에서 적절한 application을 찾아서 원하는 동작을 시켜준다.

적절한 application을 찾는 과정에서 다른 application 내의 intent-filter를 검색하여 매칭되는지 확인한다.

암시적 intent를 던질 때 call, sms 등과 같은 특정한 동작을 원할 때에는 자신이 그 동작을 수행할 수 있는 permission을 가지고 있어야 한다.

Intent i = newIntent(android.content.Intent.ACTION_VIEW,Uri.parse(“http://www.amazon.com”));
startActivity(i);
/**/
Intent i = newIntent (android.content.Intent.ACTION_DIAL,Uri.parse(“tel:+9923.....”));
startActivity(i);
/**/
Intent i = newIntent (android.content.Intent.ACTION_CALL,Uri.parse(“tel:+9923.....”));
startActivity(i);
/* permission */
<uses-permissionandroid:name=”android.permission.CALL_PHONE”/>
<uses-permissionandroid:name=”android.permission.INTERNET”/>

Android에서 SMS를 발신하기 위해서는 어떻게 해야 하는지 설명하라.

  1. “send sms” Button을 생성한다.
  2. AndroidManifest.xml 에 permisson을 설정한다.
  3. 다음과 같은 메소드를 만들어서 SMS를 발신한다.
    publicvoidsendmySMS(View v)
    {
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage("5556", null, "Hello from careerRide", null, null);
    }

SMSManager class에 대해 설명하라.

SMS를 발신할 때 사용하는 class이며, 직접적으로 초기화하여 사용할 수 없고 getDefault()를 사용해야 한다.

발신하는 메소드는 sendTextMessage()인데 다음과 같은 파라미터들을 갖는다.

  • destinationAddress: 수신자의 전화번호
  • scAddress: Service center address (null로 설정해도 된다.)
  • text: 메시지 내용
  • sentIntent: 메시지가 발신되었음을 알려주는 intent.
  • deliveryIntent: 메시지가 상대방에게 도착하였음을 알려주는 intent. 어플리케이션에서 delivery status option을 체크해줘야 한다.
publicvoidsendmySMS(View v)
{
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage("5556", null, "Hello from careerRide", null, null);
}

당신의 application에서 어떻게 Messaging application을 사용할 수 있겠는가?

SMS 발신 permission을 얻은 후, Intent를 던지면 Default SMS Application으로 설정되어 있는 Application을 통해 SMS를 발신할 수 있다.

Intent intent = new Intent (android.content.Intent.ACTION_VIEW);
intent.putExtra("address", "5556; 5558;"); // Send the message to multiple recipient.
itent.putExtra("sms_body", "Hello my friends!");
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

Android에서 사용할 수 있는 Data storage에는 어떤 것들이 있는가?

  • SharedPreferences
  • SQLite
  • ContentProvider
  • File Storage
  • Cloud Storage

SharedPreference에 대해 예시와 함께 설명하라.

SharedPreference는 Android storage 중 가장 간단한 방법을 가진다.

Data를 XML 파일에 저장하는데 Key-Value pair로 한다. Primitive data type을 사용할 수 있다. (boolean, float, int, long, string)

XML 파일은 data/data/자신의 패키지명(com.a.b)/shared-prefs/ 디렉토리에 저장된다.

A Activity에서 저장한 내용도 B Activity에서 가져다가 사용할 수 있다.

저장

SharedPreferences sf = getSharedPreferences("MyData", MODE_PRIVATE); // "Mydata" XML file, MODE_PRIVATE은 이 어플리케이션에서만 사용하겠다는 의미.
SharedPreferences.Editor ed = sf.edit();
ed.putString("name", txtusername.getText().toString());
ed.putString("pass", txtpassword.getText().toString());
ed.commit();

읽어오기

getString(value, default) 형식으로 읽어오면 되며, value가 SharedPreference에 존재하지 않을 때 “default” 값을 가져온다.

그리고 아래 코드에서는 name이나 pass 중 하나라도 못 읽어오면 “No data is found” Toast를 발생시킨다.

public static final String DEFAULT = "N/A";
SharedPreferences sf = getSharedPreferences("MyData", Context.MODE_PRIVATE);
String Uname = sf.getString("name", DEFAULT);
String UPass = sf.getString("pass", DEFAULT);
if(name.equals(DEFAULT) || Pass.equals(DEFAULT)) {
Toast.makeText(this, "No data is found", Toast.LENGTH_LONG).show();
} else {
Txtusername.setText(Uname);
Txtpassword.setText(UPass) ;
}

출처

Share