Tag Archives: java

[Java/Android] 현재 실행중인 어플리케이션을 백그라운드로 전환하기

현재 실행중인 어플리케이션을 백그라운드로 전화하기 위해서(다른 말로는 즉시 홈스크린을 띄우기 위해서)는 두가지 방법을 사용할 수 있습니다. moveTaskToBack라는 메서드를 사용하거나 Intent를 이용하여 홈을 띄우는 방법이 있습니다.

1. 메서드 활용하기

Activity에서 호출이 가능한 moveTaskToBack(boolean nonRoot)라는 메서드는 인자로 boolean형을 받고 결과값을 boolean형으로 반환합니다. 이 메서드는 현재의 엑티비티가 속해있는 테스크를 백그라운드로 즉시 이동시킵니다. 정상적으로 이동이 되었다면 true가 반환이 되며 이동에 실패할 경우 false가 반환됩니다.

하나의 인자를 받는데 true를 입력할 경우 어떠한 경우라도 상관없이 백그라운드로 이동을 시킵니다. false일 경우 현재의 엑티비티가 루트(root)일 경우에만 백그라운드로 이동시킵니다. 루트라는 말은 태스크의 가장 첫번째(바닥)의 엑티비티임을 뜻합니다.

2. Intent 활용하기

1에서 소개해드린 방법으로도 백그라운드로 전환되지 않는 특정한 상황이 있다고 합니다. 그 경우 다음의 인텐트를 활용하는 방법을 사용하면 100% 전환이 이루어집니다. 1의 방법은 엑티비티를 백그라운드로 넘기는 방법이고 이방법은 홈스크린을 현재의 화면으로 끌고 오는 방법입니다. 간단하게 다음의 코드를 사용하시면 됩니다.

Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);

다음은 위의 두가지 방법을 테스트 해볼수 있는 예제 소스를 올려드립니다. [다운로드]

사용자 삽입 이미지

[Android] 화면 회전시에 Activity onCreate() 방지하기

안드로이드는 참으로 신기한점이 많습니다. 개발자 편의를 봐주기 위한 노력이 군데군데 묻어나는 OS입니다. 그리고 그것을 이동통신사에서 커스터마이징하면서 자신들의 철학대로 바꾸곤 합니다. 구글에서 어느정도의 가이드라인을 잡아서 어느정도 이상은 커스터마이징을 할 수 없도록 하면 어떨까요?

다음의 경우는 이통사탓은 아니고-_-a 안드로이드의 이상한 철학쯤으로 보여지는 부분입니다. 정확히는 개발을 위한 편의를 생각했던 것이겠죠. 화면 회전시에 현재 보여지는 액티비티를 재생성 해버립니다. 아이폰의 경우 단순히 화면 회전만을 했다면 안드로이드는 액티비티를 제거후에 회전된 방향에 맞게 액티비티를 다시 생성하는군요.

기본적으로 상태값을 저장하도록 되어있어서 대부분의 위젯들은 본래의 상태값으로 복구가 됩니다. 하지만 그 과정이 매끄럽지 못하고 값을 잃어버리는 경우도 생깁니다.

[code]public class PreventLossActivity extends Activity
{
    private EditText mEditText;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mEditText = (EditText) findViewById(R.id.editText);

        Toast.makeText(this, “onCreate()”, Toast.LENGTH_SHORT).show();
    }
}[/code]

사용자 삽입 이미지

기본적으로 위와같은 코드를 작성하고 화면을 회전시켜보면 위와같이 onCreate()가 또 호출되는것을 알 수 있습니다. onCreate()의 모든 코드들이 재실행 된다는 것을 의미합니다.

[code]<activity
    android:name=”.PreventLossActivity”
    android:label=”@string/app_name”
    android:configChanges=”keyboardHidden|orientation”>[/code]

AndroidManifest.xml에서 위와 같이 configChanges설정을 해줍니다. 화면이 회전하거나 하드웨어 키보드를 닫을때에 해당 관련된 처리를 자동으로 처리하지 않고 액티비티 자체에서 알아서 하겠다는것을 알려주는 설정입니다.

실제로 위의 두가지 이벤트가 발생할 때 onConfigurationChanged()가 호출됩니다. 하지만 위의 예제 소스에서는 이 메서드를 구현하지 않았고 결과적으로 아무런 일이 일어나지 않습니다.

사용자 삽입 이미지

1370370599.zip