2013-09-27 3 views
3

мне нужно обнаружить первый раз, когда активность вызывается каждый раз, когда пользователь запускает приложение:Detect первый раз, когда активность открывается на этой сессии

  • App запускается
  • активности X называется для в первый раз
    • сделайте что-то
  • активность Y, Z называются много раз
  • активности X снова вызывается много раз
    • не делать ничего

... так что «сделать что-то» должен быть вызван только если приложение было закрыто (или убит), а затем будет запущен снова.

+0

Что такое «сделать что-то» точно? –

+0

Можете ли вы объяснить, зачем вам это нужно? Может быть другой способ простой способ сделать это. –

ответ

12

Я обычно использую static boolean переменную внутри деятельности в качестве флага. Затем, внутри onCreate(), проверьте переменную; если это true, сделайте что-нибудь и переверните флаг.

public class MainActivity extends Activity { 
    private static boolean RUN_ONCE = true; 

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

     ... 

     runOnce(); 
    } 

    private void runOnce() { 
     if (RUN_ONCE) { 
      RUN_ONCE = false; 

      // do something 
     } 
    } 

    ... 
} 
+4

Существует вероятность того, что статическая переменная будет очищена, когда приложение перейдет в фоновый режим, а для приложения переднего плана требуется память. –

0

Используйте этот код

private static boolean isApplicationBroughtToBackground(final Activity activity) { 
     ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); 
     List tasks = null; 
     try { 
     tasks = activityManager.getRunningTasks(1); 
     } catch (SecurityException e) { 
     Log.e(TAG, "Missing required permission: \"android.permission.GET_TASKS\".", e); 
     return false; 
     } 
     if (tasks != null && !tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     try { 
      PackageInfo pi = activity.getPackageManager().getPackageInfo(activity.getPackageName(), PackageManager.GET_ACTIVITIES); 
      for (ActivityInfo activityInfo : pi.activities) { 
      if(topActivity.getClassName().equals(activityInfo.name)) { 
       return false; 
      } 
      } 
     } catch(PackageManager.NameNotFoundException e) { 
      Log.e(TAG, "Package name not found: " + activity.getPackageName()); 
      return false; // Never happens. 
     } 
     } 
     return true; 
    } 
+0

жаль, что он не работал для меня = ( –

0

При звонке из другого вида деятельности передайте логический дополнительный с намерением. и проверить это намерение в вашем на старте

 @Override 
     protected void onStart() { 
      super.onStart(); 
      boolean firstTime= getIntent().getBooleanExtra("firstTime", true); 
    if(firstTime) 
{ 
//do something 
} 
else 
{ 
//do something 
} 
-2

использование SQLite

create table first (f INTEGER DEFAULT 0) 
public int getFirst(){ codes... } 
public void setFirst(){ codes... } 


int x = db.getFirst(); 

    if(x == 0){ 
     db.setFirst(); //update f column to 1 
     DO SOMETHING 
    } 
Смежные вопросы