In Android, is it safe to call Activity.finish()
from a background thread, or can it only called from the main thread? The documentation doesn\'t mention anything a
Probably the result could be unexpected. I'd use a Handler or some other way to send to the activity the order to kill itself in the next iteration.
No, it is not.
The code uses at least one variable, mFinished, without synchronization. Full stop.
public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (false) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (resultData != null) {
resultData.setAllowFds(false);
}
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}