我的应用滞后了大约几秒钟,然后才重新响应

时间:2018-08-20 20:30:35

标签: android multithreading

每次我在导航抽屉中选择consultation_fragment时,它会滞后几秒钟,然后再次响应。

这是我的代码

private Handler aHandler = new Handler();
View rootView;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
    LayoutInflater lf = getActivity().getLayoutInflater();
    rootView = lf.inflate(R.layout.consultation_fragment, container, false);

    aHandler.postDelayed(r, 0);
    return rootView;
}

public void sTest()
{
    viewDeclaration();
    visitorInfo();
    chat = ZopimChatApi.start(getActivity());
    Log.d("ChatHasEnded: ", String.valueOf(chat.hasEnded()));
    accountObserver = new AccountObserver()
    {
        @Override
        public void update(final Account account)
        {
            final Account.Status status = account.getStatus();
            if (status != null)
                if(getActivity() != null)
                {
                    getActivity().runOnUiThread(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            switch (status)
                            {
                                case ONLINE:
                                    mStatus.setText("Therapist is Online");
                                    mConsultation.setEnabled(true);
                                    ivStatus.setImageResource(R.drawable.online);
                                    break;
                                case UNKNOWN:
                                case OFFLINE:
                                    mStatus.setText("Therapist is Offline");
                                    mConsultation.setEnabled(false);
                                    ivStatus.setImageResource(R.drawable.offline);
                                    break;
                            }
                        }
                    });
                }
        }
    };
    // listen for account events
    ZopimChatApi.getDataSource().addAccountObserver(accountObserver);
}

final Runnable r = new Runnable()
{
    @Override
    public void run()
    {
        sTest();
    }
};

如果我检查logcat它显示此错误

我/编舞:跳过132帧!该应用程序可能在其主线程上做过多的工作。

I /编舞:跳过131帧!该应用程序可能在其主线程上做过多的工作。

I /编舞:跳过131帧!该应用程序可能在其主线程上做过多的工作。

我/编舞:跳过132帧!该应用程序可能在其主线程上做过多的工作。

I /编舞:跳过128帧!该应用程序可能在其主线程上做过多的工作。

我/编舞:跳过133帧!该应用程序可能在其主线程上做过多的工作。

I /编舞:跳过130帧!该应用程序可能在其主线程上做过多的工作。

我/编舞:跳过133帧!该应用程序可能在其主线程上做过多的工作。

更新:

罪魁祸首是我ImageView图像资源的改变。有什么办法可以防止这种情况?我真的很想在runOnUiThread上加载图像资源而不会出现跳帧错误

2 个答案:

答案 0 :(得分:1)

我刚发现可绘制图像中的一张具有2000x2000的分辨率,因此我尝试将其调整为25x25的大小,因为它永远不会落后。

答案 1 :(得分:-1)

您可以在这里看看:https://developer.android.com/guide/components/processes-and-threads我不是程序员,但我发现当程序/应用程序循环读取代码时会发生这种情况,如果我认为应该验证开关的情况问题是存在的,但使用null即可。这是同一问题的另一篇文章:https://es.stackoverflow.com/questions/67790/obtengo-el-mensaje-the-application-may-be-doing-too-much-work-on-its-main-thr