Android 啟動模式FLAG_ACTIVITY_CLEAR_TOP

四種啟動模式
  • standard: 只要被啟動就會創(chuàng)建一個新的

  • singleTop: 棧頂復(fù)用(當(dāng)被啟動的Activity處于Task棧頂時,可以復(fù)用,直接調(diào)用onNewIntent方法)

  • singleTask: 棧中復(fù)用(被啟動的Activity已經(jīng)處于棧中,會將上邊的Activity清除出棧,調(diào)用onNewIntent)

  • singleInstance 全局單實例(應(yīng)用場景:地圖,Activity初始化需要大量資源)

Intent的標(biāo)志位FLAG
  • Intent.FLAG_ACTIVITY_SINGLE_TOP 與加載模式singleTop功能相同

  • Intent.FLAG_ACTIVITY_CLEAR_TOP 銷毀目標(biāo)Activity和它之上的所有Activity,重新創(chuàng)建目標(biāo)Activity

例: A,B,C,D四個Activity,啟動模式均為默認(rèn),依次啟動,在D中啟動B。
  • 添加Intent.FLAG_ACTIVITY_CLEAR_TOP

    效果: C,D清除出棧;B被finish掉,重新啟動,重走生命周期,不會走onNewIntent()方法

Intent intent = new Intent(this,B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
d.startActivity(intent);
  • 添加Intent.FLAG_ACTIVITY_CLEAR_TOP和Intent.FLAG_ACTIVITY_SINGLE_TOP

    效果:C,D清除出棧,B調(diào)用onNewIntent()方法

Intent intent = new Intent(this,B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
d.startActivity(intent);
  • 添加Intent.FLAG_ACTIVITY_CLEAR_TOP和Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

    效果:C,D清除出棧,B回到前臺, 調(diào)用onResume()方法

Intent intent = new Intent(this,B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
d.startActivity(intent);
  • App的退出登錄功能:啟動LoginActivity,且棧中只有一個LoginActivity
Intent intent = new Intent(activity,LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容