1

当应用程序设置发生某些更改时,我会打电话recreate来。消遣后,不叫。onActivityResultMainActivityonResume

我也收到错误:

E/ActivityThread: Performing pause of activity that is not resumed

这个问题,我了解到这个函数不能从onResume. 但我是从 给他们打电话的onActivityResult。也使用处理程序来调用recreate可以解决问题,但会导致闪烁,对用户来说看起来很糟糕。这里可能有什么问题?recreate没有怎么使用Handler

任何想法将不胜感激。谢谢!

4

2 回答 2

3

OnActivityResult() 在 onResume() 之前调用。您可以做的是在 OnActivityResult() 中设置一个标志,您可以在 onResume() 中检查该标志,如果标志为真,您可以重新创建活动。

您实际上可以做的是完成活动并开始相同的活动,而不是重新创建它。你会得到同样的效果。它可能是这样的:

public class MainActivity extends AppCompatActivity   {

private boolean shouldRecreate = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("AG", "onCreate() called");
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivityForResult(intent, 0);
}

@Override
protected void onResume() {
    super.onResume();
    if (shouldRecreate){
        finish();
        startActivity(new Intent(this, MainActivity.class));
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 0){
        shouldRecreate = true;
    }
}
}
于 2016-02-22T21:14:11.327 回答
0

我终于通过从 the 发送广播SettingsActivityBroadcastRecieverinMainActivity并调用recreate()inside解决了这个问题onRecieve()

于 2016-02-22T22:07:59.810 回答