Почему я не могу вызвать одно и то же действие через adb для своего приложения несколько раз?

#java #android #android-activity #adb

#java #Android #android-активность #adb

Вопрос:

При использовании adb для выполнения оболочки для действия действие будет вызываться в приложении. Если я попытаюсь выполнить одну и ту же команду adb для одного и того же действия, оно не будет функционировать правильно. Я должен использовать принудительную остановку, прежде чем смогу снова вызвать то же действие.

  adb shell am start -n com.xxx.android/.SomeActivity
 adb shell am start -n com.xxx.android/.SomeActivity
  

Это конкретное действие будет записано в журнал.

Вопрос

Каков правильный способ выполнить действие более одного раза из adb?

После прочтения этого мне интересно, не является ли am start неправильной командой для использования, если мы уже запустили приложение?

Как бы я мог вызывать adb для своих действий после того, как приложение уже запущено, т. Е. Я запустил am start

Спасибо

Пример действия

 public class SomeActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.i("SomeActivity", "Starting Activity" );
        ... does something
        Log.i("SomeActivity", "Finished" );
        System.exit(0);
    }
}
  

Комментарии:

1. Что означает «выполнить вызов»? Что значит «вызывать» действие? Что именно означает «журнал обновляется другим вызовом»? Ваша adb shell команда запускает действие.

2. Обновлено, я думаю, это должно быть более понятным. После повторного прочтения я думаю, что мы, возможно, неправильно вызываем adb для второй попытки, поскольку его использование начинается снова. Я думаю, что нам, вероятно, следует использовать другой вызов adb после запуска приложения.

3. «Если я попытаюсь выполнить одну и ту же команду adb для одного и того же действия, оно не будет функционировать правильно». Что вы ожидаете, когда вы запрашиваете запуск действия несколько раз? Что означает «правильно функционировать»?

4. Зачем вам нужно другое действие для выполнения вызовов протоколирования, о которых вы говорили в своем первоначальном вопросе? Может ли другой обычный класс Java выполнять ведение журнала без накладных расходов на запуск действия?

5. Что еще более важно, зачем вам нужно запускать другое действие для ведения журнала? Есть ли причина, по которой вы не делаете этого с классом, не являющимся активным?

Ответ №1:

Поскольку я понимаю ваш вопрос, вам может потребоваться отправить намерение вашей активности. если вы хотите отправить действие в свое действие, вы можете использовать -a

В вашем случае вы хотите -a указать действие, -d указать URI данных и -ez указать дополнительные (при необходимости). Вы можете найти название действия, просмотрев Intent.ACTION_VIEW в документации.

в этом примере используется дополнительное логическое

 adb shell am start -a android.intent.action.VIEW -d com.package.activity:// --ez parameterName true
  

это было бы равносильно

 Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("com.package.activity://"));
intent.putExtra("parameterName", true);
startActivity(intent);
  

затем в вашей активности вы можете перехватить его через onNewIntent или в onCreate

https://developer.android.com/studio/command-line/adb.html#IntentSpec

Ответ №2:

Когда вы пытаетесь запустить действие, которое уже запущено, система Android не создает новый экземпляр действия. Вместо этого он просто выводит существующее действие на передний план.

Это означает, что методы обратного вызова жизненного цикла действия будут вызываться соответствующим образом. Вам следует прочитать Управление жизненным циклом действия и действия, чтобы лучше понять эти методы. В частности, я думаю, вы ожидаете, что onCreate() вызов будет вызван во второй раз, когда вы попытаетесь запустить действие. Это не гарантируется.

Комментарии:

1. Перезапускает ли это то, что делает это действие?

2. @ALM Методы жизненного цикла действия будут вызываться соответствующим образом.