programing

Android 회전 시 활동 다시 시작

yellowcard 2023. 10. 2. 13:54
반응형

Android 회전 시 활동 다시 시작

Android ( )가 나타납니다.Activity를 다시 시작합니다(onCreate라고 합니다.할 것 에서 초기 합니다.onCreate method 둘 중 하나가 합니다.

  1. 장치 회전 시 모든 초기 설정이 손실되지 않도록 다른 기능으로 설정합니다.
  2. 그렇게 해 주세요.onCreate됩니다.
  3. 합니다가 합니다.onCreate호출되지 않았습니다.

응용프로그램 클래스 사용

하는 작업에 를 확장하는 새 것을 해 볼 수 있습니다.Application합니다.onCreate해당 클래스의 메서드입니다.

코틀린 버전

class MyApplicationClass: Application {
    @override fun onCreate() {
        super.onCreate()
        // Put your application initialization code here
    }
}

자바 버전

public class MyApplicationClass extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // Put your application initialization code here
    }
}

onCreate응용프로그램 클래스는 전체 응용프로그램이 작성될 때만 호출되므로, 활동이 방향 전환 시 다시 시작되거나 키보드 가시성 변경으로 인해 작동이 트리거되지 않습니다.

이 클래스의 인스턴스를 싱글톤으로 노출하고 getter와 setter를 사용하여 초기화할 응용 프로그램 변수를 노출하는 것이 좋습니다.

참고: 등록하고 사용하려면 매니페스트에 새 애플리케이션 클래스의 이름을 지정해야 합니다.

<application
    android:name="com.you.yourapp.MyApplicationClass"

구성 변경에 대응

업데이트: API 13 이후로 사용되지 않습니다. 권장 대안 참조

또 다른 대안으로, 응용프로그램이 방향 및 키보드 가시성 변경과 같이 재시작을 야기할 수 있는 이벤트를 수신하고 활동 내에서 해당 이벤트를 처리하도록 할 수 있습니다.

합니다.android:configChanges활동의 매니페스트 노드에 대한 노드:

 <activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

또는 Android 3.2(API 레벨 13) 이상 버전의 경우:

<activity android:name=".MyActivity"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:label="@string/app_name">

그런 에서 활동() 를합니다.onConfigurationChanged 앤 콜dsetContentViewGUI 레이아웃을 새 방향으로 다시 수행하도록 강제합니다.

코틀린 버전

@override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    setContentView(R.layout.myLayout)
}

자바 버전

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.myLayout);
}

Android 3.2 이상 버전 업데이트:

주의:Android 3.2(API 레벨 13)부터는 장치가 세로 방향과 가로 방향으로 전환할 때 "화면 크기"도 변경됩니다.따라서 API 레벨 13 이상(minSdkVersion 및 targetSdkVersion 속성에 의해 선언된 대로) 개발 시 방향 변경으로 인한 런타임 재시작을 방지하려면 다음을 포함해야 합니다."screenSize"와 더불어 "orientation" value를 해야 합니다. 즉, 신고해야 합니다.android:configChanges="orientation|screenSize"으로 하는 이 를 처리합니다 3의 장치에서 이 시작되지 그러나 응용프로그램이 API 수준 12 이하를 대상으로 하는 경우 활동은 항상 이 구성 변경 자체를 처리합니다(Android 3.2 이상의 장치에서 실행되는 경우에도 이 구성 변경으로 인해 활동이 다시 시작되지 않습니다).

출처 http://web.archive.org/web/20120805085007/http ://developer.android.com/guide/topics/resources/runtime-changes.html

onCreate()부터를 ,요Bundle savedInstanceStateNull인지 아닌지 확인하기 위해 이벤트에 전달됩니다.

를 들어, 할 때 .Activity된 것입니다.에서 그 만 실행합니다. 저는 단지 그 논리를 실행할 뿐입니다.onCreate()savedInstanceStatenull입니다.

그렇지 않으면 레이아웃이 방향에 맞게 다시 그려지기를 원합니다.

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_game_list);

        if(savedInstanceState == null){
            setupCloudMessaging();
        }
}

이게 궁극적인 답인지는 모르겠지만 저한테는 통합니다.

내가 한 일은...

활동 섹션에 다음 사항을 추가했습니다.

android:configChanges="keyboardHidden|orientation"

실행되는 활동에 대한 코드:

//used in onCreate() and onConfigurationChanged() to set up the UI elements
public void InitializeUI()
{
    //get views from ID's
    this.textViewHeaderMainMessage = (TextView) this.findViewById(R.id.TextViewHeaderMainMessage);

    //etc... hook up click listeners, whatever you need from the Views
}

//Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    InitializeUI();
}

//this is called when the screen rotates.
// (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges)
@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);

    InitializeUI();
}

설명하는 것은 기본 동작입니다.다음을 추가하여 이러한 이벤트를 직접 감지하고 처리해야 합니다.

android:configChanges

당신의 매니페스토와 당신이 처리하고 싶은 변경사항들.따라서 방향 설정의 경우 다음을 사용합니다.

android:configChanges="orientation"

키보드를 열거나 닫을 때는 다음을 사용합니다.

android:configChanges="keyboardHidden"

두 가지를 모두 처리하려면 다음과 같이 pipe 명령을 사용하여 분리하면 됩니다.

android:configChanges="keyboardHidden|orientation"

이렇게 하면 사용자가 호출하는 모든 액티비티에서 onConfigurationChanged 메서드가 트리거됩니다.메서드를 재정의하면 새 값을 전달할 수 있습니다.

도움이 되길 바랍니다.

나는 방금 이 전설을 발견했습니다.

합니다를 하는 데 됩니다.onConfigurationChanged, 문서코드 샘플은 매니페스트 파일에서 다음을 제시합니다.

<activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

항상 효과가 있다는 추가적인 이점을 가지고 있습니다.

은 입니다.keyboardHidden도 Android 2.1우):다.orientation둘 다 하게 할 OnCreate그리고.onConfigurationChanged 그리고 오직끔,OnCreate그 밖의 때에는

저는 기기에서 고장을 본 적은 없지만, 에뮬레이터가 다른 기기에서 고장이 난다는 이야기는 들었습니다.따라서 문서화할 가치가 있습니다.

Android 플랫폼이 방향 변경을 통해 데이터를 유지하는 방식을 사용하는 것도 고려해 볼 수 있습니다.onRetainNonConfigurationInstance()그리고.getLastNonConfigurationInstance().

를 통해 와 같은 할 수 .onCreate또는 그 이후로 안드로이드가 당신의 컴퓨터를 다시 배치할 수 있게 해줍니다.Activity 중인 xml합니다.

여기나 여기를 봐요.

방법은 되지 않지만(위가 (하지만) 을 권장합니다.Fragments합니다를 합니다.setRetainInstance(true)h에Fragment당신은 유지하길 원합니다.

이 접근법은 유용하지만 프래그먼트를 사용할 때는 불완전합니다.

일반적으로 프래그먼트는 구성 변경 시 다시 생성됩니다.이런 일이 발생하지 않으려면 다음을 사용합니다.

setRetainInstance(true);

이렇게 하면 구성 변경 중에 프래그먼트가 유지됩니다.

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

저는 그냥 이렇게 덧붙였어요.

android:configChanges="keyboard|keyboardHidden|orientation"

AndroidManifest.xml파일을 추가하지 않았습니다.onConfigurationChanged내 활동의 방법.

그래서 키보드가 미끄러지거나 아무 일도 일어나지 않을 때마다!이 문제에 대해서도 이 기사를 확인해 보세요.

onCreate됩니다를 됩니다.orientation안드로이드 을 이 으로 옮기는 따라서 이 방법으로 모든 무거운 기능을 옮기는 것은 도움이 되지 않습니다도움이 되지 .

를 .<activity>꼬리를 물고 늘어놓다Manifest.xml:

android:configChanges="screenLayout|screenSize|orientation"

다음 단계만 수행하면 매우 간단합니다.

<activity
    android:name=".Test"
    android:configChanges="orientation|screenSize"
    android:screenOrientation="landscape" >
</activity>

이것은 저에게 효과가 있습니다.

참고: 고객의 요구 사항에 따라 방향이 달라집니다.

onConfigurationChanged is called when the screen rotates. 
(onCreate is no longer called when the screen rotates due to manifest, see:  
android:configChanges)

를 ""라고 .onCreate()"?

또한 구글 문서에는 사용을 피하라고 되어 있습니다.android:configChanges(최후의 수단은 제외)하지만 그들이 제안하는 대안적인 방법들은 모두 사용합니다.android:configChanges.

이었습니다라고 이 제 이었습니다.onCreate()
하지만 같은 코드를 실행하는 1-2 개의 장치들은... 하지 (왜하지 마십시오. (왜 차이가 나는지 확실하지 않습니다.)

Android 매니페스트에서 변경할 사항은 다음과 같습니다.

android:configChanges="keyboardHidden|orientation" 

내부 활동에서 추가할 사항은 다음과 같습니다.

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

이 행을 매니페스트에 추가합니다. :-

android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode"

활동에 대한 이 토막글 :-

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

다음과 같은 몇 가지 방법이 있습니다.

활동 상태 저장

를 할 수 .onSaveInstanceState.

@Override
public void onSaveInstanceState(Bundle outState) {
    /*Save your data to be restored here
    Example: outState.putLong("time_state", time); , time is a long variable*/
    super.onSaveInstanceState(outState);
}

그 다음에 사용합니다.bundle상태를 회복하기 위해서 입니다.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState!= null){
       /*When rotation occurs
        Example : time = savedInstanceState.getLong("time_state", 0); */
    } else {
      //When onCreate is called for the first time
    }
}

방향 변경을 직접 처리

또 다른 대안은 스스로 방향 변경을 처리하는 것입니다.하지만 이것은 좋은 관행으로 생각되지 않습니다.

매니페스트 파일에 추가합니다.

android:configChanges="keyboardHidden|orientation"

Android 3.2 이상의 경우:

android:configChanges="keyboardHidden|orientation|screenSize"

@Override
public void onConfigurationChanged(Configuration config) {
    super.onConfigurationChanged(config);
    
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        //Handle rotation from landscape to portrait mode here
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
        //Handle rotation from portrait to landscape mode here
    }
}

회전제한

회전을 피하기 위해 활동을 세로 또는 가로 모드로 제한할 수도 있습니다.

매니페스트 파일의 활동 태그에 추가합니다.

        android:screenOrientation="portrait"

또는 활동에서 프로그래밍 방식으로 이를 구현할 수 있습니다.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

할 수 은 하는 것입니다.onRestoreInstanceState고.onSaveInstanceState하기 위한 Bundle 도,다)가 무언가를 됩니다.Bundle비어 있지 않습니다.에.onCreate, method합니다 Bundle비어 있고, 비어 있으면 초기화를 수행하고, 그렇지 않으면 초기화를 수행합니다.

"Android 방식"은 아니지만 방향 변경을 직접 처리하고 변경된 방향을 고려하기 위해 보기 내에서 위젯을 재배치함으로써 매우 좋은 결과를 얻었습니다.보기를 저장하고 복원할 필요가 없기 때문에 다른 어떤 접근 방식보다도 빠릅니다.또한 재배치된 위젯은 정확히 동일한 위젯으로 이동 및/또는 크기가 조정되었기 때문에 사용자에게 보다 원활한 경험을 제공합니다.모델 상태뿐만 아니라 뷰 상태도 이러한 방식으로 유지할 수 있습니다.

RelativeLayout때때로 방향을 바꾸어야 하는 뷰에 좋은 선택이 될 수 있습니다.각 하위 위젯에 대해 서로 다른 상대 위치 지정 규칙이 있는 세로 레이아웃 매개변수 세트와 가로 레이아웃 매개변수 세트만 제공하면 됩니다.럼에.onConfigurationChanged()합니다를을합니다.setLayoutParams()아이들을 일일이 방문합니다.만약 어떤 아이 통제 장치 자체가 내부적으로 방향을 바꿀 필요가 있다면, 당신은 단지 그 아이에게 방향을 바꾸도록 방법을 호출할 뿐입니다.이 아이는 내부 방향 전환이 필요한 모든 아이 컨트롤에 대해서도 마찬가지로 메소드를 호출합니다.

화면이 회전할 때마다 열린 활동이 종료되고 다시 만들기()가 호출됩니다.

1. 화면 회전 시 활동 상태를 저장하여 한 가지 작업을 수행할 수 있으며, 생성()에 있는 활동을 다시 호출하면 모든 오래된 것을 복구할 수 있습니다.링크 참조

2. 활동을 다시 시작하지 않으려면 manifest.xml 파일에 다음 행을 입력하면 됩니다.

<activity android:name=".Youractivity"
    android:configChanges="orientation|screenSize"/>

onSavedInstanceState 메서드를 사용하여 모든 값을 해당 매개 변수 has(번들)에 저장해야 합니다.

@Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        outPersistentState.putBoolean("key",value);
    }

사용.

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        savedInstanceState.getBoolean("key");
    } 

화면 회전을 처리할 객체를 보기 위해 값을 검색하고 설정합니다.

참고: 미래에 저와 같은 문제에 직면한 사람이 있다면 이 답변을 게시합니다.저에게는 다음 대사로는 부족했습니다.

android:configChanges="orientation"

화면을 돌려보니 'onConfigurationChanged(Configuration new configuration)' 메서드가 호출되지 않았습니다.

해결책:또한 방향과 관련된 문제라도 "화면 크기"를 추가해야 했습니다.AndroidManifest.xml - 파일에서 다음을 추가합니다.

android:configChanges="keyboardHidden|orientation|screenSize"

그런 합니다를 합니다.onConfigurationChanged(Configuration newConfig)

manifest :

android:configChanges="keyboardHidden|orientation"

매니페스트에 이 줄을 추가합니다. android:configChanges="orientation|screenSize"

여러분들이 지금.

android:configChanges="keyboardHidden|orientation"

하지만 Android에서 회전을 처리하는 가장 좋고 전문적인 방법은 Loader 클래스를 사용하는 것입니다.유명한 수업은 아니지만(왜 그런지는 모르겠지만), 비동기식 작업보다는 훨씬 좋습니다.자세한 내용은 Udacity의 Android 과정에서 볼 수 있는 Android 튜토리얼을 참조하십시오.

물론 다른 방법으로 SaveInstanceState에 값 또는 보기를 저장하고 Restore에서 이를 읽을 수도 있습니다.인스턴스 상태.정말 당신에게 달렸어요.

구글이 도입한 안드로이드 아키텍처의 최고의 구성 요소 중 하나는 ViewModel의 모든 요구 사항을 충족시킬 것입니다.

UI 관련 데이터를 라이프사이클 방식으로 저장하고 관리하며 화면이 회전함에 따라 데이터가 생존할 수 있도록 설계되었습니다.

class MyViewModel : ViewModel() {

참고하시기 바랍니다: https://developer.android.com/topic/libraries/architecture/viewmodel

시행착오를 거듭한 끝에 대부분의 상황에서 제 요구에 맞는 해결책을 찾았습니다.코드는 다음과 같습니다.

매니페스트 구성:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.pepperonas.myapplication">

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

주 활동:

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "MainActivity";

    private Fragment mFragment;

    private int mSelected = -1;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate  " + "");

        // null check not realy needed - but just in case...
        if (savedInstanceState == null) {

            initUi();

            // get an instance of FragmentTransaction from your Activity
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

            /*IMPORTANT: Do the INITIAL(!) transaction only once!
            * If we call this everytime the layout changes orientation,
            * we will end with a messy, half-working UI.
            * */
            mFragment = FragmentOne.newInstance(mSelected = 0);
            fragmentTransaction.add(R.id.frame, mFragment);
            fragmentTransaction.commit();
        }
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "onConfigurationChanged  " +
                   (newConfig.orientation
                    == Configuration.ORIENTATION_LANDSCAPE
                    ? "landscape" : "portrait"));

        initUi();

        Log.i(TAG, "onConfigurationChanged - last selected: " + mSelected);
        makeFragmentTransaction(mSelected);
    }


    /**
     * Called from {@link #onCreate} and {@link #onConfigurationChanged}
     */
    private void initUi() {
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate  instanceState == null / reinitializing..." + "");
        Button btnFragmentOne = (Button) findViewById(R.id.btn_fragment_one);
        Button btnFragmentTwo = (Button) findViewById(R.id.btn_fragment_two);
        btnFragmentOne.setOnClickListener(this);
        btnFragmentTwo.setOnClickListener(this);
    }


    /**
     * Not invoked (just for testing)...
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG, "onSaveInstanceState  " + "YOU WON'T SEE ME!!!");
    }


    /**
     * Not invoked (just for testing)...
     */
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d(TAG, "onSaveInstanceState  " + "YOU WON'T SEE ME, AS WELL!!!");
    }


    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume  " + "");
    }


    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause  " + "");
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy  " + "");
    }


    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.btn_fragment_one:
                Log.d(TAG, "onClick btn_fragment_one " + "");
                makeFragmentTransaction(0);
                break;

            case R.id.btn_fragment_two:
                Log.d(TAG, "onClick btn_fragment_two " + "");
                makeFragmentTransaction(1);
                break;

            default:
                Log.d(TAG, "onClick  null - wtf?!" + "");
        }
    }


    /**
     * We replace the current Fragment with the selected one.
     * Note: It's called from {@link #onConfigurationChanged} as well.
     */
    private void makeFragmentTransaction(int selection) {

        switch (selection) {
            case 0:
                mFragment = FragmentOne.newInstance(mSelected = 0);
                break;
            case 1:
                mFragment = FragmentTwo.newInstance(mSelected = 1);
                break;
        }

        // Create new transaction
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack
        transaction.replace(R.id.frame, mFragment);

        /*This would add the Fragment to the backstack...
        * But right now we comment it out.*/
        //        transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit();
    }

}

그리고 샘플 조각:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * @author Martin Pfeffer (pepperonas)
 */
public class FragmentOne extends Fragment {

    private static final String TAG = "FragmentOne";


    public static Fragment newInstance(int i) {
        Fragment fragment = new FragmentOne();
        Bundle args = new Bundle();
        args.putInt("the_id", i);
        fragment.setArguments(args);
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.d(TAG, "onCreateView  " + "");
        return inflater.inflate(R.layout.fragment_one, container, false);
    }

}

깃허브에서 찾을 수 있습니다.

사용하다orientation청취자가 서로 다른 방향에 대해 서로 다른 작업을 수행합니다.

@Override
public void onConfigurationChanged(Configuration myConfig) 
{
    super.onConfigurationChanged(myConfig);
    int orient = getResources().getConfiguration().orientation; 
    switch(orient) 
    {
       case Configuration.ORIENTATION_LANDSCAPE:
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                    break;
       case Configuration.ORIENTATION_PORTRAIT:
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    break;
       default:
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    }
}

아래 코드를 당신의 코드에 입력하세요.Activity인에Android Manifest.

android:configChanges="orientation"

이렇게 하면 방향을 변경해도 활동이 다시 시작되지 않습니다.

() 합니다에서 화면 합니다.AndroidManifest.xml

android:screenOrientation="portrait"아니면android:screenOrientation="landscape"

이것을 위하여 당신의onResume()메서드가 호출되지 않았습니다.

활동에서 ViewModel 개체를 사용할 수 있습니다.

ViewModel 개체는 구성 변경 중에 자동으로 보존되어 보유한 데이터를 다음 활동이나 조각 인스턴스에서 즉시 사용할 수 있습니다.더보기: https://developer.android.com/topic/libraries/architecture/viewmodel

언급URL : https://stackoverflow.com/questions/456211/activity-restart-on-rotation-android

반응형