【问题标题】:Application or activity takes time to load some times应用程序或活动需要一些时间来加载
【发布时间】:2016-05-26 11:33:51
【问题描述】:

我创建了一个启动活动,我从该活动中调用另一个具有视图寻呼机并显示一些介绍性页面的活动。

这个应用程序需要一些时间来加载,所以我想在 Activity 加载之前显示一个进度对话框,但该进度对话框也会在几秒钟后出现。

启动活动:

public class StartUpActivity extends AppCompatActivity {
    boolean isUserFirstTime, login;
    public static String PREF_USER_FIRST_TIME;

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

        isUserFirstTime = Boolean.valueOf(Utils.readSharedSetting(StartUpActivity.this, PREF_USER_FIRST_TIME, "true"));
        Intent introIntent = new Intent(StartUpActivity.this, SlidingActivity.class);
        introIntent.putExtra(PREF_USER_FIRST_TIME, isUserFirstTime);

        ProgressDialog dialog = new ProgressDialog(StartUpActivity.this);
        dialog.setMessage("Welcome to Mea Vita, please wait till the app loads.");
        dialog.setCancelable(false);
        dialog.setInverseBackgroundForced(false);
        dialog.show();

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //Here you can send the extras.

                startActivity(new Intent(StartUpActivity.this,SlidingActivity.class));

                // close this activity
                finish();
            }
        }, 4000);
    }
}

这种情况并非每次都会发生,只是有时会发生。这可能是什么原因?我怎样才能阻止这个? 有什么解决办法吗?谢谢。。

【问题讨论】:

  • 你使用Android studio 2.0 吗?如果是这样禁用即时运行,它将被修复。 stackoverflow.com/questions/36623917/…
  • 怎么做? @阿米尔
  • 设置→构建、执行、部署→即时运行并取消选中启用即时运行
  • 这有帮助.. 谢谢.. 你能回答这个问题以便我接受吗。@Amir

标签: java android performance android-activity


【解决方案1】:

新发布的Android Studio 2.0 有一个奇怪的问题(2.1 中的相同问题)第一次启动应用程序比平时花费更长的时间(例如 2、3 秒或有时屏幕闪烁或变黑)此问题仅在调试模式下发生并且不会影响您发布的 APK。

解决此问题的临时解决方案是禁用instant run

Settings → Build, Execution, Deployment → Instant Run and uncheck Enable Instant Run

【讨论】:

    【解决方案2】:

    首先,将所有数据加载到异步任务中作为规则,您必须检查要从加载数据的位置开始的活动。

    问题出在您的第二个活动中。 oncreate 方法只能用于制作findviews 或启动async tasks,不要在oncreateonstartonresume 中加载任何内容。 可能您在滑动布局中加载高分辨率图像或在其中加载数据。

    还有另一种方法,在第一个活动上加载异步任务中的所有数据,然后使用准备好的数据启动第二个活动并加载已加载的数据。

    【讨论】:

      【解决方案3】:

      有一些内容加载缓慢。

      1. Android 需要从存储中读取您的代码并将类加载到内存中。
      2. 我假设Utils.readSharedSetting(StartUpActivity.this, PREF_USER_FIRST_TIME, "true") 从首选项中读取。这是您正在同步读取的文件。
      3. 实际上启动对话框只需要很短的时间。

      我建议您在 Activity 本身内显示您的加载,以尽量减少渲染它所需的工作。

      此外,您可以将PREF_USER_FIRST_TIME 存储为boolean 而不是String

      【讨论】:

      • 存储为布尔值而不是字符串有什么好处?
      • @MoustafaEL-Saghier 虽然性能差异可以忽略不计,但从语义上讲,布尔值更加清晰,因为它是一个布尔值,是/否。阅读也简单得多,因为您知道会发生什么,而不必担心如何解析字符串。
      • 我们是否应该开始使用DataStore 以获得更好的性能,而不是准确读取整个文件。价值?如果是,我可以从 sharedPref 迁移到 DataStore 还是我没有奇怪的代码替换?
      • @MoustafaEL-Saghier 抱歉,无法回答。我做 Android 开发已经 5 年了。
      • 没关系,谢谢你,兄弟,我知道你是个了不起的人,你可以做我的导师吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多