生姜可乐 2014-01-02 07:59 采纳率: 0%
浏览 890

关于android自定义返回功能的问题

碰到一个问题,android程序里面。

A界面跳转到B界面,用intent跳转的

,在B界面自定义了返回响应,返回方法里面直接finish().

有一个问题是,当从A界面跳转到B界面,然后程序切到后台之后,再点打开程序,在B界面点击返回按钮,就不返回到A界面了,程序直接退了。

网上查了一些资料,好像是切到后台之后堆栈就被清空了,请问大家怎么解决这个问题

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 16:34
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于Android应用程序在执行以下操作时可能会导致内存泄漏:

    1. 在Activity中使用finish()onSaveInstanceState()
    2. 在Service中使用stopSelf()bindToTask()

    如果你在B界面调用了finish()onSaveInstanceState(),那么在你从B界面回到A界面后,系统会认为B界面已经销毁,并且不再有活动窗口。这样就会导致堆栈被清理,因此当你尝试再次打开应用时,B界面就不会显示出来。

    为了解决这个问题,你可以采取以下几种方式:

    1. 通过重写onSaveInstanceState()finish()方法来避免这些行为。
    2. 使用Intent的addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)参数来清除Activity栈中的所有Activity。
    3. 在Service中使用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_TASKIntent.FLAG_ACTIVITY_CLEAR_TOP标志。这将确保我们的服务在启动时将堆栈清除,从而避免出现类似问题的情况。

    评论

报告相同问题?