【问题标题】:Update UI after screenLock屏幕锁定后更新 UI
【发布时间】:2012-10-03 08:50:49
【问题描述】:

我在 BrodcastReceiver 中的 A Activity 和 i B Activity 中。

@Override
    public void onReceive(final Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            //start activity

            ((Activity) context).runOnUiThread(new Runnable(){
              public void run(){
                    Intent i = new Intent(context, Pause.class);
                    i.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK
                      | Intent.FLAG_ACTIVITY_CLEAR_TOP
                      | Intent.FLAG_ACTIVITY_SINGLE_TOP);

              context.startActivity(i);

                  }
                });

            wasScreenOn = false;

        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {

            wasScreenOn = true;
        }
    }

问题是当解锁屏幕时,Activity A 在显示 Activity B 之前出现一秒钟。我该如何解决?

【问题讨论】:

  • Activity B 中是否有任何代码需要额外的时间才能准备好?
  • 是一个带有简单 FrameLayout 和静态 textView 的 Activity。
  • hmmm 那么应该不是问题。作为一个建议:不要给你TextView STATIC,它可能会导致内存泄漏。

标签: android broadcastreceiver start-activity


【解决方案1】:

代码看起来不错。这不是您的应用程序的问题,Android on Screen Unlock 与其他应用程序也有类似的行为。可能这也可能是因为系统可能会在 startActivity 从低功耗状态唤醒后暂停它。因此,您可能希望在更新 UI 时、屏幕关闭期间或屏幕打开后重新访问。

【讨论】:

  • 感谢您的回答,但我将 startActivity() 的代码放在接收器中的位置无动于衷。
  • 通常在 onRecieve() 中系统需要一个唤醒锁,所以会有一些延迟,然后要启动一个新的活动,UI 需要失效,并且整个视图必须是 redrwan,因此落后。 Waqas 有一些很好的建议,试试吧!
【解决方案2】:

如果延迟是由于从一个活动过渡到另一个带动画的活动,那么您只需将以下标志设置为禁用动画的意图,使您的活动快速可见。

Intent.FLAG_ACTIVITY_NO_ANIMATION

如果仍然无法解决延迟问题,请尝试将可能需要时间处理的活动 B 的代码(如数据库调用)放在 AsyncTask 中。

【讨论】:

  • 您的活动 B 的代码是什么意思?启动Activity B的代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
相关资源
最近更新 更多