You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在设备首次打开应用时将整数变量设为0

嘿,这个需求其实挺常见的——核心就是要记住应用是不是已经启动过第一次,用持久化存储来做判断就行:首次启动时执行变量赋值,之后每次启动直接跳过。下面我给你分几个主流平台说说具体实现方案:

Android 实现方案

核心思路是用SharedPreferences存储一个启动标记,在App初始化时检查这个标记:

  • 首次启动时,标记不存在(默认值为true),执行变量赋值,然后把标记设为false
  • 后续启动时,标记已经是false,直接跳过赋值操作
// Kotlin示例,放在自定义Application类或者MainActivity的onCreate方法里
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        val appPrefs = getSharedPreferences("AppLaunchPrefs", MODE_PRIVATE)
        val isFirstLaunch = appPrefs.getBoolean("is_first_launch", true)
        
        if (isFirstLaunch) {
            // 首次启动,将变量设置为0
            var targetIntVar = 0
            // 这里还可以添加其他首次启动需要执行的逻辑,比如引导页、权限申请等
            
            // 更新标记,确保下次启动不会再执行
            appPrefs.edit().putBoolean("is_first_launch", false).apply()
        }
    }
}
iOS 实现方案

iOS里可以用UserDefaults来存储启动标记,一般在App启动入口(比如AppDelegate或SceneDelegate)里做判断:

  • 首次启动时,UserDefaults里没有对应键,取到的默认值是false,此时执行赋值并标记为已启动
  • 后续启动时,标记已经是true,跳过赋值
// Swift示例,放在AppDelegate的didFinishLaunchingWithOptions方法中
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let userDefaults = UserDefaults.standard
    let hasLaunchedBefore = userDefaults.bool(forKey: "has_launched_before")
    
    if !hasLaunchedBefore {
        // 首次启动,设置变量为0
        var targetIntVar = 0
        // 添加其他首次启动逻辑
        
        // 标记为已启动过
        userDefaults.set(true, forKey: "has_launched_before")
    }
    return true
}
Flutter 跨平台实现方案

Flutter可以借助shared_preferences插件来实现跨平台的持久化标记,步骤如下:

  1. 先在pubspec.yaml中添加依赖:shared_preferences: ^2.2.2(可以替换为最新版本)
  2. 在App初始化时检查标记,执行赋值逻辑
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {
  // 必须先初始化Flutter绑定,才能调用异步方法
  WidgetsFlutterBinding.ensureInitialized();
  final prefs = await SharedPreferences.getInstance();
  final isFirstLaunch = prefs.getBool('is_first_launch') ?? true;
  
  if (isFirstLaunch) {
    // 首次启动,设置变量为0
    int targetIntVar = 0;
    // 其他首次启动操作
    
    // 更新标记
    await prefs.setBool('is_first_launch', false);
  }
  
  runApp(const MyApp());
}

额外注意点

  • 卸载重装App会清除持久化存储的标记,所以会再次触发首次启动逻辑,这符合需求
  • 如果需要让这个变量在App全局可用,可以结合对应平台的状态管理方案(比如Android的ViewModel、iOS的单例、Flutter的Provider)来存储,而不是只在启动方法中临时定义

内容的提问来源于stack exchange,提问作者Christian Webb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:41:11