面临问题。解锁设备后未调用OnStart Onresume方法

时间:2019-06-17 08:16:41

标签: android android-fragments android-lifecycle

由于某种原因,在新项目中,当设备被锁定/解锁时,“活动”和“片段”的生命周期表现得不太正确。阻止时,仅调用onPause。解锁时,不会调用任何内容。如何解决?

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "com.iteco.testfragmentactivity"
            minSdkVersion 21
            targetSdkVersion 27
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            ndk {
                abiFilters "armeabi-v7a", "x86", 'armeabi', 'arm64-v8a'
            }
            packagingOptions {
                exclude '/lib/mips64/**'
                exclude '/lib/arm64-v8a/**'
                exclude '/lib/x86_64/**'
                exclude 'META-INF/rxjava.properties'
            }
            javaCompileOptions {
                annotationProcessorOptions {
                    arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
                }
            }
        }

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }

        testOptions {
            unitTests {
                returnDefaultValues = true
            }
        }

        lintOptions {
            abortOnError false
        }

        aaptOptions {
            cruncherEnabled = true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        def android_rx_version = '2.1.1'
        def retrofit_version = '2.3.0'

        implementation "android.arch.persistence.room:runtime:1.0.0"
        annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
        implementation 'com.android.support:support-annotations:27.1.0'
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.github.traphan:material-calendarview:1.19'
        implementation 'com.android.support:appcompat-v7:27.1.0'
        implementation 'com.android.support:support-v4:27.1.0'
        implementation 'com.android.support:design:27.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        implementation 'com.jakewharton:butterknife:8.8.1'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
        implementation 'com.github.traphan:PinBlockLib:1.1'
        implementation 'com.android.support:recyclerview-v7:27.1.0'
        implementation 'com.jakewharton.timber:timber:4.6.0'
        implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
        implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
        implementation 'com.squareup.okhttp3:okhttp:3.9.1'
        implementation group: 'io.reactivex.rxjava2', name: 'rxjava', version: "$android_rx_version"
        implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0'
        implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
        implementation 'io.reactivex:rxandroid:1.2.1'
        implementation "android.arch.lifecycle:extensions:1.1.0"
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
        implementation 'com.android.support:cardview-v7:27.1.0'
    }
    import android.arch.lifecycle.Lifecycle;
    import android.arch.lifecycle.LifecycleOwner;
    import android.arch.lifecycle.LifecycleRegistry;
    import android.arch.lifecycle.ViewModelProviders;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import static com.iteco.testfragmentactivity.MainActivity.TAG_LOG;

    public class CommonFragment extends Fragment implements LifecycleOwner {

        private LifecycleRegistry lifecycleRegistry;
        private CommonViewModel mViewModel;

        public static CommonFragment newInstance() {
            return new CommonFragment();
        }

        public CommonFragment() {
            lifecycleRegistry = new LifecycleRegistry(this);
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG_LOG, this.toString() + "onCreate");
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
        }

        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                                 @Nullable Bundle savedInstanceState) {
            Log.d(TAG_LOG, this.toString() + "onCreateView");
            return inflater.inflate(R.layout.common_fragment, container, false);
        }

        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            Log.d(TAG_LOG, this.toString() + "onActivityCreated");
            mViewModel = ViewModelProviders.of(this).get(CommonViewModel.class);
            // TODO: Use the ViewModel
        }

        @Override
        public void onDestroyView() {
            Log.d(TAG_LOG, this.toString() + "onDestroyView");
            mViewModel.onCleared();
            super.onDestroyView();
        }

        @NonNull
        @Override
        public Lifecycle getLifecycle() {
            return lifecycleRegistry;
        }

        @Override
        public void onStart() {
            super.onStart();
            //more code here
            Log.d(TAG_LOG, this.toString() + "onStart");
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
        }

        @Override
        public void onResume() {
            super.onResume();
            //more code here
            Log.d(TAG_LOG, this.toString() + "onResume");
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
        }

        @Override
        public void onPause() {
            super.onPause();
            //more code here
            Log.d(TAG_LOG, this.toString() + "onPause");
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
        }

        @Override
        public void onStop() {
            super.onStop();
            //more code here
            Log.d(TAG_LOG, this.toString() + "onStop");
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            //more code here
            Log.d(TAG_LOG, this.toString() + "onDestroy");
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
        }

    }
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import butterknife.ButterKnife;
    import static com.iteco.testfragmentactivity.MainActivity.TAG_LOG;
    public class HostActivity extends AppCompatActivity {

        private FragmentTransaction fragmentTransaction;
        private FragmentManager fragmentManager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_host);
            ButterKnife.bind(this);
            fragmentManager = getSupportFragmentManager();
            fragmentTransaction = fragmentManager.beginTransaction();
            commitRegisterOfTaskFragment();
        }

        public void commitRegisterOfTaskFragment() {
            CommonFragment commonFragment = new CommonFragment();
            fragmentTransaction.replace(R.id.host, commonFragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
        }

    }
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.iteco.testfragmentactivity">
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".HostActivity"
                android:configChanges="orientation"></activity>
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

它是测试代码。代码对我来说不正确。这个问题对我来说至关重要。

0 个答案:

没有答案