多个TextViews更新速度非常慢

gut*_*ory 11 android textview android-service

我有一个服务,每0.1秒发送一次Intent到我的Activity.我用它来更新Chronometer的自定义实现.一切顺利.当我想在我的Activity中的Fragment中的TableView中更新14 TextView时,问题出现了.这里的应用程序非常慢.

我的Activity中的方法,它从服务接收Intent:

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        long milis = intent.getLongExtra("milis",0);
        if( mFragment != null)
        mFragment.Update(milis);
    }
};
Run Code Online (Sandbox Code Playgroud)

Fragment中我更新TextViews的代码:

public void actualizarTiempoJuego(long milis){
    // Se recuperan los tiempos acumulados y se aumenta la cantidad pasada como parámetro
    for(int i=0;i<7;++i) {
        long mCurrentMilis1 = mVectorMilis1.get(i);
        long mCurrentMilis2 = mVectorMilis2.get(i);
        TextView1 t1 = mListaTitularLayoutLocal.get(i);
        TextView1 t2 = mListaTitularLayoutVisitante.get(i);
        t1.setText(String.value(milis + mCurrentMilis1));
        t2.setText(String.value(milis + mCurrentMilis2));
    }
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么,还是仅仅是因为我想在效率方面做一些非常复杂的事情?

Fra*_*aro 7

@Sherif提出了一个很好的观点,关于隐藏的alpha值会让你的应用程序陷入困境.您可能还需要检查,具体取决于您的平台

<application android:hardwareAccelerated="true"... />
Run Code Online (Sandbox Code Playgroud)

您可以查看的另一件事可能有助于提高性能并不会触发所有这些意图.一旦你开始触发意图,你就会得到系统,并且根据它们如何得到解决,可能需要一些额外的时间.

对于这个问题,我喜欢使用Handlers.它们比意图更轻.您可能还想查看AsyncTask.这基本上就像一个线程,但也提供了在UI线程上运行的钩子,因此您可以执行后台操作并更新UI而无需发布runnables.

编辑:最后,您始终可以通过layoutopt工具运行布局.Romain Guy亲自告诉我,如果你的绘图太慢,那么你需要画得更少.只需从分析工具中查看截图(来自不太理想的视图树,但在最大范围内).您可以看到视图绘制占用了多少资源.如果您希望应用程序具有响应能力,那么尽可能保持精简非常重要. 分析查看绘图资源消耗

编辑:它不再被称为layoutopt,它被称为lint.检查你的〜/ android-sdk/tools /


She*_*tib 5

我曾经遇到过片段非常慢的情况.

我只是预测你的片段有某种alpha,它是在一个'重'活动上绘制的.

结论是,每次设置textview的文本时,整个视图层次结构都将失效.

似乎碎片有这个缺陷.无论如何,使用一些布局而不是片段,并检查它是否仍然"慢".


附加:在setTextfill_parent文本视图之后,wrap_content 文本视图将导致更多延迟.