我需要我的应用程序与平板电脑兼容,所以我将一些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。
答案 0 :(得分:2)
您应该能够将this
的大部分案例替换为getActivity()
。始终使用此getter,因为活动参考可能会更改(例如:方向更改)。但是,请记住您调用它的上下文。 getActivity()
将在附加片段之前和片段分离之后返回null
。如果将其保留在生命周期内,通常应该是安全的。
答案 1 :(得分:0)
是的,这样做是安全的,更好的方法是使用getActivity()不做任何参考。