2017-04-05 83 views
0

我有两个活动简单的应用程序。这是明显的:莫名其妙的行为背后的行为

<application> 
<activity 
      android:name=".ActivityA" 
      android:theme="@style/AppTheme.NoActionBar.Map"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ActivityB" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:host="https://stackoverflow.com/" 
         android:scheme="http" 
         android:pathPrefix="https://stackoverflow.com/questions/ask" 
        /> 
      </intent-filter> 
     </activity> 
</> 

就像你看到的,当被点击链接“https://stackoverflow.com/questions/ask” - 我的应用程序将打开第二个活动。 在ActivityB我重写onBackPressed方法:

override fun onBackPressed() { 
     if(isTaskRoot){ 
       startActivity(Intent(this, MapActivity::class.java)) 
       finish() 
      } else { 
       super.onBackPressed() 
      } 
    } 

所以当次活动从开始的链接,我回来点击BTN,ActivityA被打开,ActivityB完成。

第一次看起来一切看起来不错,但如果在此之后我按回家btn,然后从堆栈重新启动应用程序 - ActivityB再次打开,而不是ActivityA。

请解释为什么会发生这种情况,以及如何解决此问题。谢谢!

UPDATE onBackPressed在ActivityB后,ActivityA被打开,然后我点击onBackBtn代替HomeBtn,所以应用程序被关闭。在这种情况下,从堆栈重新启动后ActivityB打开。

回答

0

当您在ActivityB中按主页btn时,Android在活动生命周期中调用onPause()方法,此时您的应用在activityB上暂停。它不会像你重写onBackPressed()那样被销毁。因此,当您再次重新启动应用时,SO将会在ActivityB上拨打电话onResume(),它位于后台。 要更改此行为,您必须在手动完成活动时覆盖onPause()方法。

+0

我按homeBtn在ActivityA我离开ActivityB后onBackPressed –

+0

小更新,请大家看看 –

+0

我明白了,尝试调用完成方法'else'以及其他'{完成()}' –