1

我在 Galaxy Note (gt-n7000) 上遇到了问题。由于一些变化的需求,我似乎无法直接通过 startActivity(intent) 在两个活动之间传递数据。所以我实现了一个 Singleton 类:

public class IntentStack {
private static IntentStack instance;
private Map<String, Stack<Intent>> IntentMap = new HashMap<String, Stack<Intent>>();

    public synchronized static IntentStack getInstance() {
        if (instance == null) {
            instance = new IntentStack();
        }
        return instance;
    }

    private synchronized Stack<Intent> getStack(String key) {
        if (IntentMap.containsKey(key)) 
            return IntentMap.get(key);
        else 
            return null;
    }

    public synchronized Intent getTopIntent(String key) {
        if (IntentMap.containsKey(key)) {
            if (!getStack(key).isEmpty())
                return IntentMap.get(key).pop();
            else 
                return null;
        } else {
            return null;
        }
    }

    public synchronized void addIntent (String key, Intent intent) {
        Stack<Intent> newStack;
        if (IntentMap.containsKey(key)) {
            newStack = IntentMap.get(key);
        } else {
            newStack = new Stack<Intent>();
        }
        newStack.push(intent);
        IntentMap.put(key, newStack);
    }

    public synchronized void clearIntents(String key) {
        IntentMap.remove(key);
    }

}

在我的第一个活动中,我将数据放入 IntentStack 中,如下所示:

IntentStack.getInstance().addIntent(Core.getIm().getClassName("photobill"), takePictureIntent);

在我的第二个活动中,我尝试获得一个意图:

Intent i = IntentStack.getInstance().getTopIntent(Core.getIm().getClassName("photobill"));

其中 Core.getIm().getClassName(string) 从 Map 中获取其值,该 Map 在应用程序启动时初始化。

问题是,Intent inull仅限于 Galaxy Note (gt-n7000)。在其他手机上,代码可以正常工作。

什么可能导致这种行为?我应该怎么做才能解决它?

4

1 回答 1

1

Android 不保证静态变量会保留其值。如果设备开始缺乏资源(内存),它将“取消分配”静态变量。这可能是你的情况。

首先,我会添加登录

if (instance == null) {
   //ADD LOG HERE
   instance = new IntentStack();
}

查看您是否正在创建新实例。

于 2013-11-11T13:50:57.217 回答