0

更改夜灯模式在我的模拟器中完美运行,但是当我尝试在物理设备(小米)上做同样的事情时,我得到下一个异常:

E/ActivityInjector: get life cycle exception
    java.lang.ClassCastException: android.os.BinderProxy cannot be cast to android.app.servertransaction.ClientTransaction
        at android.app.ActivityInjector.checkAccessControl(ActivityInjector.java:24)
        at android.app.Activity.onResume(Activity.java:1859)
        at androidx.fragment.app.FragmentActivity.onResume(FragmentActivity.java:456)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1454)
        at android.app.Activity.performResume(Activity.java:8050)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4269)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4311)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:57)
        at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5353)

这是我在活动和演示者中的代码,我在其中更改了我的应用程序的模式:

public class MoviesListActivity extends AppCompatActivity implements MovieListView {

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == R.id.darkMode) {
            presenter.changeToDarkMode();
        }
        else if(item.getItemId() == R.id.lightMode) {
            presenter.changeToLightMode();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.movie_list);

        presenter =  new MoviesListPresenter(this, getApplicationContext());

        if (presenter.getCurrentMode() == 0) {
            presenter.changeToLightMode();
        } else {
            presenter.changeToDarkMode();
        }
    }

    //Other code...
}

主持人:

public class MoviesListPresenter {
 
    public void changeToLightMode() {
        currentMode = context.getSharedPreferences(Constants.MODE, Context.MODE_PRIVATE);
        currentMode.edit().putInt(Constants.MODE, 0).apply();
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    }

    public void changeToDarkMode() {
        currentMode = context.getSharedPreferences(Constants.MODE, Context.MODE_PRIVATE);
        currentMode.edit().putInt(Constants.MODE, 1).apply();
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    }

    public int getCurrentMode() {
        currentMode = context.getSharedPreferences(Constants.MODE, Context.MODE_PRIVATE);
        return currentMode.getInt(Constants.MODE, 0);
    }
}

我会感谢任何帮助!

4

1 回答 1

1

这似乎是调用Activity.recreate()小米固件引起的。这个问题也发生在我的库中,它重新创建了应用语言更改的活动。

https://github.com/akexorcist/Localization/issues/89

就我而言,没有应用程序崩溃并且代码正常工作。所以我跳过了这个问题。

相关问题

于 2021-03-01T18:52:55.353 回答