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

Android Studio中如何让动画仅在应用启动或重启时运行

解决动画仅在应用首次启动/重启时运行的问题

问题根源

你遇到的重复动画问题,核心原因是Activity2的返回逻辑错误:在back()方法中,你先finish()当前Activity,又调用startActivity()重新启动MainActivity,这会创建一个新的MainActivity实例,导致onCreate()再次执行,而成员变量isFirstTime在新实例中会被重新初始化为true,所以动画再次运行。

另外,即使修复返回逻辑,仅用成员变量isFirstTime也不可靠——当应用被系统回收后重启、或设备旋转导致Activity重建时,该变量会重置,动画会再次触发。


解决方案

1. 修复Activity2的返回逻辑

不需要重新启动MainActivity,直接finish()当前Activity即可回到栈中已存在的MainActivity实例:

public class MainActivity2 extends AppCompatActivity {
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        button = findViewById(R.id.back);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                back();
            }
        });
    }
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        overridePendingTransition(0, 0);
    }
    public void back(){
        // 直接finish当前Activity,回到之前的MainActivity
        finish();
        overridePendingTransition(0, 0);
    }
}

2. 用持久化标记控制动画仅首次运行

使用SharedPreferences存储首次启动标记,确保动画仅在应用安装后首次打开、或应用被彻底杀死重启时运行:

public class MainActivity extends AppCompatActivity {
    TextView view;
    Button button;
    SharedPreferences sharedPreferences;
    private static final String FIRST_LAUNCH_KEY = "first_launch";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = findViewById(R.id.text);
        button = findViewById(R.id.button);

        sharedPreferences = getSharedPreferences("app_prefs", MODE_PRIVATE);
        boolean isFirstLaunch = sharedPreferences.getBoolean(FIRST_LAUNCH_KEY, true);
        
        if (isFirstLaunch) {
            animation();
            // 标记为已启动过
            sharedPreferences.edit().putBoolean(FIRST_LAUNCH_KEY, false).apply();
        }

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                startActivity(intent);
            }
        });
    }

    public void animation(){
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.alpha);
        Animation animatio = AnimationUtils.loadAnimation(this,R.anim.alpha);
        view.startAnimation(animation);
        button.startAnimation(animatio);
    }
}

额外说明

  • 如果需要在用户清除应用数据后重新触发动画,SharedPreferences的标记会被清除,正好符合需求。
  • 若要支持“重启应用时再次触发动画”,可以在应用退出时清除标记,但通常不需要——除非有特定业务场景。

内容的提问来源于stack exchange,提问作者Noob tv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:57:30