Может быть, вашей мобильной памяти недостаточно, Эта проблема на самом деле не связана с PhoneGap.Это распространенная проблема и для нативных приложений для Android. Это происходит потому, что при срабатывании камеры активность андроида становится фоновой (состояние onStop), ожидая, когда камера сделает снимок.Затем GC приходит и убивает действие, чтобы освободить память перед завершением действия камеры, и когда камера завершена, ваша активность уже умерла.Вот почему приложение перезапускается.
Вот мои предложения
1. Замените плагин cramer, избегайте использования пользовательских плагинов, запускающих сборку мусора, (http://code.google.com/p/foreground-camera-plugin/, http://code.google.com/p/foreground-gallery- plugin /) 2. Обнаруживает память, если ее недостаточно для уничтожения других процессов, активно освобождает память 3. Улучшайте их выживание, старайтесь избегать освобождения памяти в выбранной системе.
private void clearMemory(boolean killAll)
{
mklog("当前系统可用内存大小是:" + getAvailMemory(getApplicationContext()));
ActivityManager activityManger = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = activityManger
.getRunningAppProcesses();
if (list != null)
for (int i = 0; i < list.size(); i++)
{
ActivityManager.RunningAppProcessInfo apinfo = list.get(i);
System.out.println("pid " + apinfo.pid);
System.out.println("processName "
+ apinfo.processName);
System.out
.println("importance " + apinfo.importance);
String[] pkgList = apinfo.pkgList;
if (apinfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND
|| (killAll && apinfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE))
{
// Process.killProcess(apinfo.pid);
for (int j = 0; j < pkgList.length; j++)
{
activityManger.killBackgroundProcesses(pkgList[j]);
mklog("准备杀死进程:" + pkgList[j]);
}
}
}
mklog("清理之后 当前系统可用内存大小是:" + getAvailMemory(getApplicationContext()));
}
private long getAvailMemory(Context context)
{
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);
return mi.availMem / (1024 * 1024);
}
public void mklog(String contentString)
{
Log.i("Web Console", contentString);
}