我需要知道以下流程是否正常: 活动A onPause被调用是因为活动B占用了焦点,但几秒钟后,当活动B完成并且在调用Activity的onDestroy之前onStop &被调用,ActivityA(同一实例)onResume被调用。 我在活动中有noHistory = true清单中的defing。返回活动,即使它没有历史记录= true
我认为,一旦活动失去焦点,一个noHistory = true的活动实例将永远不会被返回。
我需要知道以下流程是否正常: 活动A onPause被调用是因为活动B占用了焦点,但几秒钟后,当活动B完成并且在调用Activity的onDestroy之前onStop &被调用,ActivityA(同一实例)onResume被调用。 我在活动中有noHistory = true清单中的defing。返回活动,即使它没有历史记录= true
我认为,一旦活动失去焦点,一个noHistory = true的活动实例将永远不会被返回。
您所描述的ActivityA.onResume()
被调用的行为是不正确的。我怀疑AndroidManifest.xml文件中存在拼写错误。你可以发布它并向我们展示吗?
onStop()
和onDestroy()
的时间稍微没有定义。这是一个可行的示例,但onStop()
和onDestroy()
不会在用户点击后退按钮之前调用(但onResume()
从不会调用)。如果我在启动ActivityB之后调用finish()
,那么它们会在之前的ActivityA上被调用。
输出而不光洁度():
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:19:onCreate()] onCreate()[email protected]
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:45:onStart()] onStart()[email protected]
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:39:onResume()] onResume()[email protected]
NEXT!
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:51:onPause()] onPause()[email protected]
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()[email protected]
D/HelloAndroidActivity(13013): [HelloAndroidActivity.java:63:onDestroy()] onDestroy()[email protected]
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:44:onStop()] onStop()
D/GoodbyeAndroidActivity(13013): [GoodbyeAndroidActivity.java:50:onDestroy()] onDestroy()
OUTPUT与抛光:
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:19:onCreate()] onCreate()[email protected]
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:45:onStart()] onStart()[email protected]
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:39:onResume()] onResume()[email protected]
NEXT!
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:51:onPause()] onPause()[email protected]
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()[email protected]
D/HelloAndroidActivity(13113): [HelloAndroidActivity.java:63:onDestroy()] onDestroy()[email protected]
[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>
感谢您的回复。这是活动定义的方式:
我有一个类BaseActivity,它扩展了Activity并从中派生了LoginActivity。在基类中,我以您在代码中执行的方式向打印日志发送打印,所以这是我看到在进入另一活动后返回到LoginActivity.onResume的方式。 – galbarm 2011-08-18 05:50:30
很奇怪。我复制并将你的属性粘贴到我的应用程序中,它工作正常。想到的问题:你的minSdkVersion和targetSdkVersion是什么?你是否能够在多个设备上重现这一点?你能找到我在这里发布的例子来在你的环境中工作吗? – Jason 2011-08-18 13:22:40
这听起来像@Sam任务有你的答案。在启动新活动之前调用onFinish()。如果它发生是由于用户导航,那么你的活动应该完成,但我不知道是否有任何保证。如果您的LoginActivity正在创建活动,那么调用onFinish()听起来是正确的,而不是解决方法。
用于活动结果。那么你的问题将解决。
我想你必须让它死亡(完整活动lifecyle)。还有一件事情,活动A必须从屏幕上完全隐藏起来才能使事件被解雇。如果您不希望在启动活动B之前调用finish()。 – Samuel 2011-08-17 10:59:18