bal*_*pha 24 android android-activity
如果FirstActivity是任务的根,并完成自身的推出SecondActivity,然后调用isTaskRoot()中SecondActivity立即返回false,因为FirstActivity的整理异步发生,因而还没有完成.等待一秒然后调用isTaskRoot()返回true.
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
startActivity(new Intent(this, SecondActivity.class));
}
}
Run Code Online (Sandbox Code Playgroud)
public class SecondActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
((TextView)findViewById(R.id.tv1))
.setText("isTaskRoot() in onResume(): " + isTaskRoot());
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
((TextView)findViewById(R.id.tv2))
.setText("isTaskRoot() after 1s: " + isTaskRoot());
}
}, 1000);
}
}
Run Code Online (Sandbox Code Playgroud)

有没有办法......
(最佳地)找出活动最终是否为任务根,或者,
(好于什么都没有)一旦任务处于"最终"状态,isTaskRoot()就会得到某种通知/回调,从而返回"真相"?
我也遇到过类似的问题,我想严格控制根活动到底是谁。就我而言,根只能是我自己的活动之一(而不是第三方活动),因此我可以使用以下方法:
我扩展了该类Application,添加了对名为的活动的弱引用currentRootActivity,并添加了同步 getter 和 setter。
然后,当活动创建/销毁时,我自己管理这个状态。我的用例有点特殊,因为我希望用一个根替换另一个根,所以我确切地知道在哪里重置我的新状态变量,但我很确定你可以做同样的事情。
我什至可以在所有活动的共享基类中添加此状态逻辑。所以这并不像听起来那么恶心:)
正如评论中提到的,活动方法isFinishing也可能派上用场。
| 归档时间: |
|
| 查看次数: |
6861 次 |
| 最近记录: |