Как изменить каждое намерение один раз при использовании singleTask - PullRequest
4 голосов
/ 30 июня 2011

Я использую операцию в однозадачном режиме, которая обрабатывает файлы определенного типа, указывая фильтры намерений.Мне нужно обработать каждый такой файл Intent ровно один раз.Проблема в том, что onNewIntent () вызывается только в том случае, если задача уже активна, что заставляет меня обрабатывать намерение и из onCreate ().К сожалению, onCreate () вызывается по целому ряду причин (например, поворот экрана), и Intent, возвращаемый getIntent (), может быть одинаковым для нескольких onCreate ().Конечно, можно обойти это, используя некрасивый хак, но мне было интересно, каким будет элегантное решение.Пока что лучшее решение, которое я придумал, - это setIntent (новый Intent (Intent.ACTION_MAIN)) каждый раз после обработки намерения.Это аналогично тому, как веб-серверы перенаправляют вас на страницу GET после страницы POST, чтобы избежать повторного выполнения операции в результате обновления.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 30 июня 2011

Я не уверен, что у меня возникла ваша проблема, но как только вы вызвали намерение и начали новое действие, сразу после завершения вызова (); чтобы закончить деятельность, которую вы покидаете. Это завершит ваше последнее действие и предотвратит одновременное выполнение нескольких действий.

Также, если вы используете поворот экрана как способ запуска действий, вы всегда можете контролировать, какой из них вы не хотите запускать несколько раз, установив некоторые проверки с помощью операторов «If and Else».

0 голосов
/ 13 декабря 2011

удаление SingleTask решит вашу проблему;вызов удалить действие singleTask, можно заменить на:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
              | Intent.FLAG_ACTIVITY_SINGLE_TOP);
0 голосов
/ 30 июня 2011

Как насчет setIntent (null) после его обработки?

...