График запуска приложения

Я работаю над приложением, в котором после 5 раз приложение открывается пользователем, при 6-й попытке приложение должно запросить обратную связь от пользователя. Я попытался использовать Activity OnStart , OnResume , но он не работает, так как даже после ухода и повторного входа в действие эти методы называются. Также, как и в случае с функциями Android, я не могу отказаться от приложения, чтобы узнать его из первого вызванного действия. Как узнать, сколько раз приложение было запущено?

Надеюсь, это не смущает.

редактировать

Кроме того, существует способ, в котором я всегда могу возобновить свое приложение из первого действия (например, приветственной страницы), как только пользователь нажимает на кнопку, чтобы выйти из приложения.

Solutions Collecting From Web of "График запуска приложения"

Это на самом деле довольно просто. Использование SharedPreference или базы данных.

Во время OnCreate добавьте 1 к счетчику numberofTimes и зафиксируйте.

 OnCreate (Bundle bundle){ mPref = getPreferences(); int c = mPref.getInt("numRun",0); c++; mPref.edit().putInt("numRun",c).commit(); //do other stuff... } 

OnCreate вызывается независимо от того, запускаете ли вы приложение или возобновляете приложение, но isFinishing () возвращает true тогда и только тогда, когда пользователь (или вы) назвал finish () в приложении (и он не был уничтожен менеджером)

Таким образом, вы только увеличиваетесь, когда начинаете новый старт.

Метод isFinishing () внутри метода OnPause, чтобы проверить, завершено ли действие () или просто приостановлено.

 @Override protected void OnPause(){ if(!isFinishing()){ c = mPref.getInt("numRun",0); c--; mPref.edit().putInt("numRun",c).commit(); } //Other pause stuff. } 

Это охватывает все ваши сценарии:

 1. user starts app/activity (+1)-> finishes app, exit with finish() 2. user starts app (+1) -> pause (-1) -> returns (+1)-> finish 3. user starts app (+1) -> pause (-1) -> android kills process (0) -> user returns to app (+1) -> user finish. 

При каждом сценарии вы увеличиваете счетчик «раз подряд» только один раз за «запуск» активности

Если у вас есть начальная активность для запуска приложения, вы можете реализовать его следующими способами. 1. База данных: – через базу данных вы можете сохранить счет запуска приложения и получить его при создании активности.

  1. Статическая переменная: статическая переменная также сохраняет значения во время запуска и завершения приложения

  2. Предпочтение приложения: -вы можете сохранить значение в предпочтении приложения и использовать его

Проблема с подходами 2 и 3 заключается в том, что если вы выключите и снова включите свой телефон, вы потеряете данные. Но если вы все еще хотите использовать подход 2 или 3, то подход 2 очень прост и

Пример кода для третьего подхода здесь

Вам нужно расширить класс Application и создать подкласс из этого

 public class MyApp extends Application{ int visitCount; onCreate(){ visitCount=0; } 

И вы можете упомянуть об этом в своем манифестном файле, например

 <application name="MyApp"> ..... </application> 

И в onCreate вашей деятельности вы можете получить ее

 MyApp myApp=(MyApp)getApplicationContext(); 

Edit1: подкласс вашей деятельности и метод переопределения

 public class myActivity extends Activity{ @Override onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); counterFlag=true; } } 

Он вызывается, когда пользователь нажимает кнопку «домой»

И снова переопределите onResume () и проверьте, включен ли флаг счетчика или нет, и создайте всю свою активность, выполнив подкласс MyActivity

Также, если любое другое действие имеет точку выхода по нажатию кнопки «Назад», вы можете переопределить

  @Override public void back_pressed(){ } 

И выполняйте свою задачу соответственно

Я думаю, что это был бы лучший вариант, чтобы охватить все сценарии:

 private static boolean valueOfLaunchCountModified = false; @Override protected void onCreate(Bundle savedInstanceState) { if(!valueOfCountModified){ preferences = getPreferences(MODE_PRIVATE); launchCount= preferences.getInt("launchCount", 0); if(preferences.edit().putInt("launchCount", ++launchCount).commit()){ valueOfCountModified = true; if(launchCount == 5){ //Do whatever you want } } } } 

Если мы вспомним определение статической переменной («… они связаны с классом, а не с каким-либо объектом. Каждый экземпляр класса использует переменную класса …»), мы обнаружим, что это идеально для нас.

Когда выполняется метод onPause или изменение ориентации, значение «valueOfLaunchCountModified» не изменяется; Однако, если процесс приложения уничтожен, значение «valueOfLaunchCountModified» изменяется на false.

просто,

Decalre:

  private SharedPreferences prefs; private SharedPreferences.Editor editor; private int totalCount; 

Initialize in onCreate (…):

  prefs = getPreferences(Context.MODE_PRIVATE); editor = prefs.edit(); 

Распечатывать или подсчитывать, где вы хотите (любое место в onCreate или любой конкретный клик, как вы указали)

  totalCount = prefs.getInt("counter", 0); totalCount++; editor.putInt("counter", totalCount); editor.commit(); 

Теперь напечатайте totalcount, куда вы хотите посчитать, например .:

  System.out.println("Total Application counter Reach to :"+totalCount); 

Если вы хотите только подсчитать «истинные» вызовы, то расширьте приложение и поместите логику счетчика в Application#onCreate . Это может быть простое предпочтение

Но … если проблема в том, что вы не можете сказать, сколько раз , конечно, вы знаете, когда . Я предлагаю вам другой подход: например, спросите пользователя один раз в день.

ОК! Я знаю! Это не точное решение, но это возможное решение.