Самый короткий ответ, вероятно, будет «определение - исполнение», поэтому весь аргумент не имеет строгой точки зрения. В качестве более надуманного примера вы можете привести следующее:
def a(): return []
def b(x=a()):
print x
. Надеюсь, этого достаточно, чтобы показать, что не выполнять выражения аргументов по умолчанию во время выполнения инструкции def
не просто или не работает, т. е. смысл, или и то, и другое.
Я согласен с тем, что при попытке использовать конструкторы по умолчанию, это будет gotcha.
Пока вы используете один и тот же сертификат в обоих приложениях, ваши приложения будут работать в одном процессе и будут вести себя как одно и то же приложение, чтобы проверить этот раздел документации по Android http://developer.android.com/tools/publishing /app-signing.html#strategies
Вы, безусловно, можете разделить одну базу данных между двумя приложениями.
. Чтобы обмениваться данными между приложениями (при условии, что они выпущены одним и тем же издателем), вам нужно будет указать общий идентификатор пользователя в AndroidManifest .xml обоих приложений.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >
(Это недокументировано, но общий идентификатор пользователя должен быть строкой с хотя бы одним разделителем точек).
Остальное легко, и вам не нужно беспорядок вокруг пути базы данных. Просто используйте тот же DBAdapter в обоих приложениях. В приложении, которое размещает базу данных, вызовите DBAdapter с родным контекстом.
DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();
Во втором приложении доступ к базе данных с контекстом приложения для размещения базы данных. Сначала определите общий контекст:
Context sharedContext = null;
try {
sharedContext = this.createPackageContext("replace.with.host.package.name", Context.CONTEXT_INCLUDE_CODE);
if (sharedContext == null) {
return;
}
} catch (Exception e) {
String error = e.getMessage();
return;
}
Затем откройте DBAdapter с общим контекстом:
DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext);
sharedDBadapter.open();
В качестве окончательной заметки, если ваша база данных существует до установки общего идентификатор пользователя в манифесте, вам нужно будет удалить / переустановить приложения на физическом устройстве, чтобы вы не заблокировали себя из своей базы данных (sqlite error 14). С другой стороны, эмулятор может оказаться более прощающим. Итог, если ваши приложения опубликованы на рынке Android, установка общего идентификатора пользователя в запоздалой мысли не будет работать.
Надеюсь, это поможет.
Путь к базе данных является приватным для каждого приложения, и насколько я знаю, его невозможно получить непосредственно через приложения.
Однако один из подходов состоит в том, что одно приложение делает его доступным для другого, a ContentProvider . Проверьте, работает ли это для вас.
Поставщики контента хранят и извлекают данные и делают их доступными для всех приложений. Это единственный способ обмена данными между приложениями; нет общей области хранения, доступной всем пакетам Android.
blockquote>