在Singleton类中保存Activity是不是很糟糕?

时间:2015-08-06 09:57:38

标签: android android-fragments android-activity android-context android-memory

我对Android很新,我需要你的帮助。

我很好奇我做的是不是正确的事。

我的应用程序只有一个Activity(MainActivity它是AppCompatActivity btw)。

但是我使用了几个片段。

一些片段包含一个必须具有Activity的Object(我称之为ProblemClass)(不过是Context)。

诸如ListView的适配器(或类似的东西)来扩充布局

或Dialog必须膨胀布局并需要Context来创建AlertDialog.Builder。

它(ProblemClass)无法调用getActivity()。

在我看来,我有两个解决方案。

1.Pass Activity to ProblemClass。

2.在Singleton中控制活动,以便在任何Class整个应用程序中使用。

我选择后者。但...

我在某处读过可能会导致内存泄露,对吗?

由于Singleton-Object存在整个应用程序生命周期。

这是我举行活动的单身人士。

我在MainActivity中的onCreate()中调用setMyActivity(MainActivity.this)将其传递给Singleton。

public class MyActivitySingleton 
{
    private AppCompatActivity mAppCompatActivity;

    private MyActivitySingleton()
    {

    }

    private static class MyActivitySingletonHolder
    {
        private static final MyActivitySingleton INSTANCE = new MyActivitySingleton();
    }

    public static MyActivitySingleton getInstance()
    {
        return MyActivitySingletonHolder.INSTANCE;
    }

    public AppCompatActivity getMyActivity()
    {
        return this.mAppCompatActivity;
    }

    public void setMyActivity(AppCompatActivity appCompatActivity)
    {
        this.mAppCompatActivity = appCompatActivity;
    }
}

有什么建议吗?我该怎么办?

将Activity传递给ProblemClass,如果需要Context。它也可以使用Activity作为上下文吗?

感谢。

1 个答案:

答案 0 :(得分:0)

对于片段上的适配器,您可以:

ArrayAdapter<String> adapter = ArrayAdapter<String>(getActivity(), stringList);
listView.setAdapter(adapter);