碰到一个问题,android程序里面。
A界面跳转到B界面,用intent跳转的
,在B界面自定义了返回响应,返回方法里面直接finish().
有一个问题是,当从A界面跳转到B界面,然后程序切到后台之后,再点打开程序,在B界面点击返回按钮,就不返回到A界面了,程序直接退了。
网上查了一些资料,好像是切到后台之后堆栈就被清空了,请问大家怎么解决这个问题
碰到一个问题,android程序里面。
A界面跳转到B界面,用intent跳转的
,在B界面自定义了返回响应,返回方法里面直接finish().
有一个问题是,当从A界面跳转到B界面,然后程序切到后台之后,再点打开程序,在B界面点击返回按钮,就不返回到A界面了,程序直接退了。
网上查了一些资料,好像是切到后台之后堆栈就被清空了,请问大家怎么解决这个问题
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是由于Android应用程序在执行以下操作时可能会导致内存泄漏:
finish()或onSaveInstanceState()stopSelf()或bindToTask()如果你在B界面调用了finish()或onSaveInstanceState(),那么在你从B界面回到A界面后,系统会认为B界面已经销毁,并且不再有活动窗口。这样就会导致堆栈被清理,因此当你尝试再次打开应用时,B界面就不会显示出来。
为了解决这个问题,你可以采取以下几种方式:
onSaveInstanceState()和finish()方法来避免这些行为。addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)参数来清除Activity栈中的所有Activity。startForeground()而不是stopSelf()。例如,如果要实现上述第2种情况,可以在Service中这样做:
public class YourService extends Service {
@Override
public IBinder onBind(Intent intent) {
// ...
return null;
}
@Override
public void onCreate() {
super.onCreate();
Intent start = new Intent(this, YourActivity.class);
start.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(start);
}
}
在这个例子中,我们首先创建了一个新的Intent,并添加了Intent.FLAG_ACTIVITY_NEW_TASK和Intent.FLAG_ACTIVITY_CLEAR_TOP标志。这将确保我们的服务在启动时将堆栈清除,从而避免出现类似问题的情况。