При вызове метода create дважды в zxing

Я новичок в Android. Я реализовал вкладку в одном приложении. В котором я использовал Tab Host. В одной из вкладок я реализовал Zxing для сканирования штрих-кода.

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
getParent().startActivityForResult(intent, 0);


Теперь, когда сканирование завершено, я переопределил результат действия в моем TabGroupActivity, как.

@Override

public void onActivityResult(int requestCode,int resultCode, Intent data)
 {

  super.onActivityResult(requestCode, resultCode, data);

}


Теперь проблема заключается в том, что после завершения сканирования моя вкладка "Активность" вызывает два раза.

И то и другое onCreate() а также onResume() метод Tab Activity и его дочерние вызовы дважды. Я не хочу, чтобы он вызывался дважды.

Спасибо за помощь

Первое редактирование
Файл манифеста

<activity
            android:name="com.google.zxing.client.android.CaptureActivity"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
             <intent-filter>
                 <action android:name="com.google.zxing.client.android.SCAN" />

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

        <receiver android:name=".TimeAlarm" />

        <activity
            android:name=".TabsWithFragmentsActivity"
            android:theme="@android:style/Theme.Light.NoTitleBar" 
            android:screenOrientation="portrait">
        </activity>

Еще одна вещь, которую я просто заметил, что мое приложение ведет себя по-другому. На планшете с версией больше 4.0 работает отлично. Но с Android Tablet версии 3.0 это работает, как я объяснил выше. Я не уверен, какая версия Zxing нужна, если кто-нибудь может помочь?

3 ответа

Решение

Метод onCreate может быть вызван дважды.

В андроиде, когда доступной памяти меньше при запуске другого приложения. Это может убить ваше приложение, даже если оно запускает другое приложение. Он даже будет вызываться при изменении ориентации (если для этого действия не задано android:configChanges="direction|keyboardHidden|screenSize")

Как и в вашем случае, вы запускаете внешнее приложение (Zxing), которому может потребоваться больше памяти, чем доступно. В результате ваше приложение будет уничтожено, а стек активности с экземплярами сохранения будет сохранен).

Поэтому, когда пользователь возвращается к вашему приложению. Android Framework снова запустит ваше приложение с тем же состоянием и активностью, что приведет к вызову вашего метода onCreate (т. Е. Снова будет создано действие).

Чтобы узнать, был ли он воссоздан или запущен в первый раз. Вы можете проверить сохраненный экземпляр состояния для нуля. Если его ноль, то он запускается в первый раз.

Это может быть также из-за изменения ориентации, попробуйте добавить android:configChanges="direction|keyboardHidden|screenSize" для активности в манифесте.

Я заметил похожее поведение при работе со сторонними библиотеками, и часто самое простое решение немного хакерское, но простое для понимания и легкое в реализации. Просто следите за тем, onCreate был вызван с помощью static boolean значение:

private static boolean hasBeenCreated = false;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    if (!hasBeenCreated)
    {
        hasBeenCreated = true;
        //the rest of your onCreate code
    }
}

Попробуйте назвать свое намерение так:

Intent intent = new Intent(this, CaptureActivity.class);
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
getParent().startActivityForResult(intent, 0);
Другие вопросы по тегам