앱은 여러화면으로 구성되어 있고 화면을 전환하며 실행된다. 각 화면은 액티비티로 구현한다.
즉, 화면을 필요에 따라 띄우거나 닫는 과정은 액티비티를 전환하는 것이라고 할 수 있따.
액티비티는 안드로이드 앱의 기본 구성요소 중 하나이다.
<aside> 💡 안드로이드 앱의 구성 요소
</aside>
안드로이드 앱의 구성 요소로는 액티비티(Activity), 서비스(Service), 브로드캐스트 수신자(Broadcast Receiver)가 있다. 앱을 만들어 단말에 설치했을 때 안드로이드 시스템이 이 요소에 대한 정보를 요구한다.
이 정보들은 AndroidManifest.xml
에 저장되어있다. <activity>태그는 액티비티에 대한 정보를 포함하고 있으며, 새로운 액티비티를 추가한다면 매니페스트 파일에도 새 액티비티 정보를 추가해야한다. 그래야 시스템이 새 액티비티에 대한 정보를 알 수 있다.
액티비티를 소스코드에서 띄울때는 startActivity(Intent intent)
메소드를 사용하면 된다. 하지만 실제 앱을 만들때는 새로운 화면을 띄웠다가 돌아오고하는 경우가 많다.
그래서 단순히 액티비티를 띄워주는 것이 아니라 어떤 액티비티를 띄운 것인지, 띄웠던 액티비티로부터 다시 원래의 액티비티로 돌아오면서 응답을 처리하는 코드가 필요하게 된다.
이럴 때, startActivityForResult()
메소드를 사용한다.
startActivityForResult(Intent intent, int requestCode)
파라미터로는 intent와 정수로된 코드값이 인가된다. 코드값은 각각의 액티비티를 구분하기 위해 사용된다. 새 액티비티에서 원래 액티비티로 돌아오며, 새 액티비티의 응답을 받아 처리해야하는 경우에 어떤 액티비티로부터 돌아온 응답인지 구분하여 응답을 처리해야 할 때 사용한다.
<!-- AndroidManifest.xml -->
<activity android:name=".MenuActivity"
android:label="메뉴 액티비티"
android:theme="@style/Theme.AppCompat.Dialog"></activity>
android:label
속성은 화면의 제목을 설정할 때 사용하고, android:theme
속성은 테마를 설정할 때 사용한다.
public class MenuActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("name", "mike");
setResult(RESULT_OK, intent);
finish();
}
});
}
}
onClick()
메소드 안에서는 Intent
클래스를 사용해 객체를 하나 만든 후, setResult()
메소드를 호출한다.
setResult()
메소드는 새로 띄운 액티비티에서 이전 액티비티로 인텐트를 전달할 때 사용한다.
setResult(응답 코드, 인텐트)
finish()
메소드는 화면에서 액티비티를 없앨 때 사용된다.