毕加索:如何检查单身是否已经设定

时间:2015-08-29 16:57:23

标签: android android-lifecycle picasso

我正在使用Picasso来处理我的应用中的图片加载。在我的Activity我做

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.loading_screen);
    setupPicasso();
    // ...
}

private void setupPicasso()
{
    Cache diskCache = new Cache(getDir(CacheConstants.DISK_CACHE_DIRECTORY, Context.MODE_PRIVATE), CacheConstants.DISK_CACHE_SIZE);
    OkHttpClient okHttpClient = new OkHttpClient();
    okHttpClient.setCache(diskCache);

    Picasso picasso = new Picasso.Builder(this)
            .memoryCache(new LruCache(CacheConstants.MEMORY_CACHE_SIZE))
            .downloader(new OkHttpDownloader(okHttpClient))
            .build();

    picasso.setIndicatorsEnabled(true); // For debugging

    Picasso.setSingletonInstance(picasso);
}

首次启动应用程序和按主页按钮暂停应用程序时,此功能正常。但是,当按下后退按钮关闭应用程序,然后重新打开应用程序时,我收到以下错误:

java.lang.IllegalStateException: Singleton instance already exists.

这是因为Picasso不允许重置全局单例实例。解决这个问题的最佳方法是什么?是否可以检查单例是否已经设置?或者我是否需要在Activity中保留成员变量并检查它是否为null?对此有任何最佳做法表示赞赏。

4 个答案:

答案 0 :(得分:3)

在您自己setupPicasso()的{​​{1}}中呼叫onCreate方法 类。扩展Application类并覆盖Application。然后,您需要使用完全限定的应用程序类将onCreate属性添加到清单的name部分。

<application>

然后在你的清单中,

package my.package

public class MyApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();
    setupPicasso();
}

答案 1 :(得分:1)

你必须像iagreen所提到的那样扩展应用程序类,但你也应该使用try / catch包围setUpPicasso方法,这样如果抛出异常,你就可以处理它并防止你的应用程序崩溃。

所以

package my.package

public class MyApplication extends Application {

@Override
public void onCreate() 
{
    super.onCreate();

    try
    {
        setupPicasso();
    }

    catch ( IllegalStateException e )
    {
        //TODO
    }
}

答案 2 :(得分:0)

您也可以试试这个。

private static boolean initializedPicasso = false;


if (!initializedPicasso) {
     setupPicasso();
     initializedPicasso = true;
}

答案 3 :(得分:0)

setupPicasso()中围绕try-catch方法,如下所示:

try {
    setupPicasso();
} catch (Exception e) {
    e.printStackTrace();
}