将实例变量指向片段内的活动是否安全?

时间:2017-09-21 15:02:52

标签: java android android-fragments

我需要我的应用程序与平板电脑兼容,所以我将一些Activity类转换为Fragment类。但是在我的课程的活动版本中,我有很多// The channel need only be created for API 26 devices. For devices // running an API less the 26, there is no way to create a channel and the // channel ID specified in the constuctor to NotificationCompat.Builder is // merely a placeholder. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { createNotifChannel(this); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (manager.getNotificationChannel(NOTIF_CHANNEL_ID) == null) { createNotifChannel(this); } } this不能使用Fragment,因此我的所有功能都以此声明开头:

getSupportActionBar

然后我将ContextCompat.getColor(this, ...)替换为final AppCompatActivity activity = (AppCompatActivity) getActivity(); this替换为activity等。

我的问题很简单:在我的Fragment类中有一个实例变量来保存对活动的引用是内存泄漏安全的,以避免在我的所有方法中声明getSupportActionBar变量。这个问题可能看似虚假,但我承认我不太了解活动中的内存泄漏,而且我发现了很多文章和帖子,告诉我要小心,我有点害怕滥用Activity。

2 个答案:

答案 0 :(得分:2)

您应该能够将this的大部分案例替换为getActivity()。始终使用此getter,因为活动参考可能会更改(例如:方向更改)。但是,请记住您调用它的上下文。 getActivity()将在附加片段之前和片段分离之后返回null。如果将其保留在生命周期内,通常应该是安全的。

答案 1 :(得分:0)

是的,这样做是安全的,更好的方法是使用getActivity()不做任何参考。