我需要检测每次用户启动应用程序时第一次调用活动的时间:
- 应用程序启动
- 第一次调用Activity X
- 做一点事
- 活动 Y、Z 被多次调用
- Activity X 被多次调用
- 没做什么
...所以“做某事”只有在应用程序关闭(或杀死)然后再次启动时才需要调用。
我需要检测每次用户启动应用程序时第一次调用活动的时间:
...所以“做某事”只有在应用程序关闭(或杀死)然后再次启动时才需要调用。
我通常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
}
}
...
}
使用此代码
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;
}
当从其他活动调用时,会传递一个带有意图的布尔值。并在您的开始时检查此意图
@Override
protected void onStart() {
super.onStart();
boolean firstTime= getIntent().getBooleanExtra("firstTime", true);
if(firstTime)
{
//do something
}
else
{
//do something
}
使用 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
}