Возврат к действию, даже если оно имеет noHistory = true - PullRequest
3 голосов
/ 17 августа 2011

Мне нужно знать, нормален ли следующий поток: Действие A onPause вызывается, потому что действие B перешло в фокус, но спустя несколько секунд, когда действие B завершено и перед вызовом onStop & onDestroy из Действие A, Действие A(тот же экземпляр) вызывается onResume.У меня noHistory = true в действии. Определение в манифесте.

Я думал, что экземпляр действия с noHistory = true никогда не будет возвращен, когда действие потеряло фокус.

Ответы [ 3 ]

5 голосов
/ 17 августа 2011

Поведение, которое вы описываете при вызове ActivityA.onResume(), неверно.Я подозреваю опечатку в вашем файле AndroidManifest.xml.Можете ли вы опубликовать его и показать нам?

Сроки onStop() и onDestroy() чуть менее определены.Вот пример, который работает, но onStop() и onDestroy() не вызываются, пока пользователь не нажмет кнопку назад (но onResume() никогда не вызывается).Если я вызову finish() после запуска ActivityB, то они будут вызваны ранее на ActivityA.

ВЫХОД без завершения ():

D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:19:onCreate()] onCreate()com.example.hello.HelloAndroidActivity@4055d2e8
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:45:onStart()] onStart()com.example.hello.HelloAndroidActivity@4055d2e8
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:39:onResume()] onResume()com.example.hello.HelloAndroidActivity@4055d2e8
NEXT!
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:51:onPause()] onPause()com.example.hello.HelloAndroidActivity@4055d2e8
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:16:onCreate()] onCreate()
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:32:onStart()] onStart()
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:26:onResume()] onResume()
[BACK]
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:38:onPause()] onPause()
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:57:onStop()] onStop()com.example.hello.HelloAndroidActivity@4055d2e8
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:63:onDestroy()] onDestroy()com.example.hello.HelloAndroidActivity@4055d2e8
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:44:onStop()] onStop()
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:50:onDestroy()] onDestroy()

ВЫХОД с завершением:

D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:19:onCreate()] onCreate()com.example.hello.HelloAndroidActivity@4051b940
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:45:onStart()] onStart()com.example.hello.HelloAndroidActivity@4051b940
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:39:onResume()] onResume()com.example.hello.HelloAndroidActivity@4051b940
NEXT!
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:51:onPause()] onPause()com.example.hello.HelloAndroidActivity@4051b940
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:16:onCreate()] onCreate()
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:32:onStart()] onStart()
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:26:onResume()] onResume()
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:57:onStop()] onStop()com.example.hello.HelloAndroidActivity@4051b940
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:63:onDestroy()] onDestroy()com.example.hello.HelloAndroidActivity@4051b940
[BACK]
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:38:onPause()] onPause()
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:44:onStop()] onStop()
D/GoodbyeAndroidActivity(13113): [GoodbyeAndroidActivity.java:50:onDestroy()] onDestroy()

HelloAndroidActivity.java:

public class HelloAndroidActivity extends Activity {
    private static final String TAG = "HelloAndroidActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "onCreate()" + this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent i = new Intent(HelloAndroidActivity.this,
                        GoodbyeAndroidActivity.class);
                startActivity(i);
                // Uncomment this:
                 finish();
            }
        });
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume()" + this);
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, "onStart()" + this);
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d(TAG, "onPause()" + this);
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop()" + this);
    }

    @Override
    public void onDestroy() {
        super.onStop();
        Log.d(TAG, "onDestroy()" + this);
    }

}

GoodbyeAndroidActivity.java:

public class GoodbyeAndroidActivity extends Activity {
    private static final String TAG = "GoodbyeAndroidActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "onCreate()");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.goodbye);
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume()");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, "onStart()");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d(TAG, "onPause()");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop()");
    }

    @Override
    public void onDestroy() {
        super.onStop();
        Log.d(TAG, "onDestroy()");
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:id="@+id/hello_text"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
        <Button  
        android:id="@+id/button"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="NEXT!"
        />
    </LinearLayout>

goodbye.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:id="@+id/hello_text"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Goodbye!!!"
    />
</LinearLayout>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.hello"
          android:versionCode="1"
          android:versionName="1.0">
        <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10"/>

        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name="com.example.hello.HelloAndroidActivity"
                      android:label="@string/app_name"   android:noHistory="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name="com.example.hello.GoodbyeAndroidActivity">
            </activity>

        </application>
    </manifest>
1 голос
/ 19 сентября 2011

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

1 голос
/ 17 сентября 2011

Похоже, у @Sam Quest есть ваш ответ.Вызовите функцию Finish () перед запуском нового действия.Если это произошло из-за пользовательской навигации, то ваша деятельность должна быть завершена, но я не знаю, есть ли гарантия когда.Если ваша функция LoginActivity создает действие, то вызов onFinish () звучит как правильное решение, а не как обходной путь.

...