1

我读到在屏幕旋转后,再次创建了一个 android 活动。我了解如何恢复视图,但我不知道是否可以从屏幕旋转后停止方法的位置开始。

4

2 回答 2

0

如果在您转动屏幕时正在执行某个方法,该方法将完成其工作。

它不会被暂停或其他任何事情,因为它“不可能”这样做。

如果该特定方法对您的应用程序/活动很重要,您应该在重新创建活动时再次调用它。

于 2013-11-06T20:04:25.623 回答
0

屏幕旋转后恢复。

在最简单的形式中,您可以保存您需要在 onSaveInstanceState 方法中停止的地方重新创建的内容。因此,对于您的基本手电筒,您可以保存灯的状态。对于您更复杂的应用程序,您可以保存所有全局字段。Flashlight 有一个全局变量 isFlashOn。

private boolean isFlashOn = false;

在 onSaveInstanceState 中保存手电筒的状态

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean(ISON, isFlashOn);
}

然后在 oncreate 方法中重新创建全局变量。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState != null) {
        isFlashOn = savedInstanceState.getBoolean(ISON);
    } 

稍后在 onstart 方法过程中使用 isFlashOn。这个手电筒是通过单击打开的,因此我更改了 isFlashOn 的状态并调用了单击处理程序。

@Override
protected void onStart() {
    super.onStart(); // Always call the superclass method first

    if (camera == null) {
        camera = Camera.open();
    }
            //flip the isflashon and then click the button
    isFlashOn = !isFlashOn;
    onClick(null);
}

处理点击。

public void onClick(View arg0) {
    ImageButton i = (ImageButton) findViewById(R.id.imageButton1);

    final Parameters p = camera.getParameters();
    if (isFlashOn) {
        i.setImageResource(R.drawable.ic_launcher);
        isFlashOn = false;
        p.setFlashMode(Parameters.FLASH_MODE_OFF);
    } else {
        i.setImageResource(R.drawable.ic_launcher2);
        p.setFlashMode(Parameters.FLASH_MODE_TORCH);
        camera.setParameters(p);
        // Set flag to true
        camera.startPreview();
        isFlashOn = true;
    }

祝你好运

于 2013-11-06T20:39:17.773 回答