Использование контекста приложения везде?

Здесь нет проблемы с остановкой. Все, что вам нужно, это вычислить, если пересечение ^xy1\d и [^\d]\d2$ в непустое.

Я не могу дать вам алгоритм здесь, но вот два обсуждения метода для создания пересечения, не прибегая к построению DFA:

И тогда есть RAGEL

, который также может вычислять пересечение регулярных выражений.

UPDATE : Я только что пробовал Ragel с регулярным выражением OP. Ragel может генерировать «dot» файл для graphviz из конечного конечного автомата, что потрясающе. Пересечение регулярного выражения OP выглядит так в синтаксисе Ragel:

('xy1' digit any*) & (any* ^digit digit '2') 

и имеет следующий автомат:

В то время как пустое пересечение:

('xy1' digit any*) & ('q' any* ^digit digit '2')

выглядит так:

Так что если все остальное не работает , вы все равно можете вычислить Ragel пересечение и проверить, выводит ли он пустую машину состояний, сравнивая сгенерированный «точечный» файл.

462
задан Segfault 4 March 2010 в 17:39
поделиться

3 ответа

У этого подхода есть несколько потенциальных проблем, хотя во многих обстоятельствах (например, в вашем примере) он будет работать хорошо.

В частности, вы должны быть осторожны, имея дело со всем, что связано с GUI , требующим Context . Например, если вы передадите контекст приложения в LayoutInflater , вы получите исключение. Вообще говоря, ваш подход превосходен: рекомендуется использовать Activity Context в этом Activity и Application Context при передаче контекста за пределы область действия Activity - позволяет избежать утечек памяти .

Кроме того, в качестве альтернативы вашему шаблону вы можете использовать ярлык вызова getApplicationContext () для объекта Context (например, Activity), чтобы получить контекст приложения.

если вы передадите контекст приложения в LayoutInflater , вы получите исключение. Вообще говоря, ваш подход превосходен: рекомендуется использовать Activity Context в этом Activity и Application Context при передаче контекста за пределы область действия Activity - позволяет избежать утечек памяти .

Кроме того, в качестве альтернативы вашему шаблону вы можете использовать ярлык вызова getApplicationContext () для объекта Context (например, Activity), чтобы получить контекст приложения.

если вы передадите контекст приложения в LayoutInflater , вы получите исключение. Вообще говоря, ваш подход превосходен: рекомендуется использовать Activity Context в этом Activity и Application Context при передаче контекста за пределы область действия Activity - позволяет избежать утечек памяти .

Кроме того, в качестве альтернативы вашему шаблону вы можете использовать ярлык вызова getApplicationContext () для объекта Context (например, Activity), чтобы получить контекст приложения.

405
ответ дан 22 November 2019 в 22:53
поделиться

По моему опыту, в таком подходе нет необходимости. Если вам нужен контекст для чего-либо, вы обычно можете получить его с помощью вызова View.getContext () и используя полученный там Context , вы можете вызвать Context.getApplicationContext () , чтобы получить контекст приложения . Если вы пытаетесь получить контекст Application this из Activity , вы всегда можете вызвать Activity.getApplication () , который можно передать как Контекст , необходимый для вызова SQLiteOpenHelper () .

В целом, похоже, нет проблем с вашим подходом в этой ситуации,

28
ответ дан 22 November 2019 в 22:53
поделиться

Вы пытаетесь создать оболочку для получения контекста приложения, и есть вероятность, что она может вернуть указатель « null ».

Насколько я понимаю, это лучший подход к вызову - любой из двух Context.getApplicationContext () или Activity.getApplication () .

9
ответ дан 22 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: