Jeśli FirstActivity
jest głównym zadaniem, a to kończy się i rozpoczyna SecondActivity
, następnie wywołanie isTaskRoot()
w SecondActivity
natychmiast powróci false
, ponieważ FirstActivity
skończenie przebiega asynchronicznie, a więc nie jest jeszcze gotowe. Oczekiwanie na sekundę i następnie wywołanie isTaskRoot()
zwraca wartość true.Sprawdzaj, czy bieżąca aktywność będzie ostatecznie korzeń zadanie, po oczekiwaniu czynności wykończeniowe zniknęły
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
startActivity(new Intent(this, SecondActivity.class));
}
}
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);
}
}
Czy istnieje sposób, aby & hellip;
(optymalnie) dowiedzieć się, czy działalność będzie korzeniem zadanie ostatecznie, albo
(lepsze to niż nic) dostać jakąś powiadomień/oddzwanianie, gdy zadanie jest w swoim " końcowy "stan i tym samym
isTaskRoot()
zwróci" prawdę "?
Możesz wywołać metodę isFinishing() na czynności, która była poprzednio rootem zadania, aby sprawdzić, czy jest ona w trakcie kończenia. –
@RaghavSood Działa to tylko wtedy, gdy znam wszystkie czynności w stosie, które być może nie są. – balpha
@balpha Hmm true. Możesz użyć 'registerActivityLifecycleCallbacks()' w aplikacji, jeśli masz zamiar obsługiwać API poziomu 14 i wyższego (a.k.a, Android 4.0+). Lub możesz użyć jednego z hacky nieoficjalnych snippets, aby uzyskać listę wszystkich działań w stosie –