2011-08-17 114 views
3

我需要知道以下流程是否正常: 活动A onPause被调用是因为活动B占用了焦点,但几秒钟后,当活动B完成并且在调用Activity的onDestroy之前onStop &被调用,ActivityA(同一实例)onResume被调用。 我在活动中有noHistory = true清单中的defing。返回活动,即使它没有历史记录= true

我认为,一旦活动失去焦点,一个noHistory = true的活动实例将永远不会被返回。

+0

我想你必须让它死亡(完整活动lifecyle)。还有一件事情,活动A必须从屏幕上完全隐藏起来才能使事件被解雇。如果您不希望在启动活动B之前调用finish()。 – Samuel 2011-08-17 10:59:18

回答

5

您所描述的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> 
+0

感谢您的回复。这是活动定义的方式: android:name =“。main.LoginActivity” android:noHistory =“true” /> android:screenOrientation = – galbarm 2011-08-18 05:47:28

+0

我有一个类BaseActivity,它扩展了Activity并从中派生了LoginActivity。在基类中,我以您在代码中执行的方式向打印日志发送打印,所以这是我看到在进入另一活动后返回到LoginActivity.onResume的方式。 – galbarm 2011-08-18 05:50:30

+0

很奇怪。我复制并将你的属性粘贴到我的应用程序中,它工作正常。想到的问题:你的minSdkVersion和targetSdkVersion是什么?你是否能够在多个设备上重现这一点?你能找到我在这里发布的例子来在你的环境中工作吗? – Jason 2011-08-18 13:22:40

0

这听起来像@Sam任务有你的答案。在启动新活动之前调用onFinish()。如果它发生是由于用户导航,那么你的活动应该完成,但我不知道是否有任何保证。如果您的LoginActivity正在创建活动,那么调用onFinish()听起来是正确的,而不是解决方法。

1

用于活动结果。那么你的问题将解决。

相关问题