Logcat 说 - 应用程序可能在其主线程上做了太多工作,并且错误消息说 - StringtoReal.invalidReal(string.boolean)line:63 [关闭]

Posted

技术标签:

【中文标题】Logcat 说 - 应用程序可能在其主线程上做了太多工作,并且错误消息说 - StringtoReal.invalidReal(string.boolean)line:63 [关闭]【英文标题】:Logcat says - The application may be doing too much work on its main thread and error message says - StringtoReal.invalidReal(string.boolean)line:63 [closed] 【发布时间】:2012-10-12 12:05:05 【问题描述】:

每当我在模拟器中运行我的应用程序时, Logcat 说 - 应用程序可能在其主线程上做了太多的工作,并且 错误消息说 - StringtoReal.invalidReal(string.boolean)line:63 在这里,我正在尝试添加 3 个文本视图的值,并在另一个文本视图中使用复选框上的勾号显示它们的总数

10-12 17:23:21.074: W/ActivityThread(700): 
Application com.suvendu.tutorial.cb is waiting for the debugger on port 8100...
10-12 17:23:21.134: I/System.out(700): Sending WAIT chunk
10-12 17:23:21.143: I/dalvikvm(700): Debugger is active
10-12 17:23:21.334: I/System.out(700): Debugger has connected
10-12 17:23:21.334: I/System.out(700): waiting for debugger to settle...
10-12 17:23:21.545: I/System.out(700): waiting for debugger to settle...
10-12 17:23:21.744: I/System.out(700): waiting for debugger to settle...
10-12 17:23:21.943: I/System.out(700): waiting for debugger to settle...
10-12 17:23:22.155: I/System.out(700): waiting for debugger to settle...
10-12 17:23:22.353: I/System.out(700): waiting for debugger to settle...
10-12 17:23:22.554: I/System.out(700): waiting for debugger to settle...
10-12 17:23:22.754: I/System.out(700): waiting for debugger to settle...
10-12 17:23:22.954: I/System.out(700): waiting for debugger to settle...
10-12 17:23:23.164: I/System.out(700): debugger has settled (1368)
10-12 17:23:25.243: I/Choreographer(700): Skipped 46 frames!  
The application may be  doing too much work on its main thread.
10-12 17:23:25.533: D/gralloc_goldfish(700): Emulator without GPU emulation detected.

活动代码:-

OnClickListener checkBoxListener;
@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    text_regular_code=(TextView)findViewById(R.id.text_regular);
    text_small_code=(TextView)findViewById(R.id.text_small);
    text_large_code=(TextView)findViewById(R.id.text_large);

    text_check_regular_code=(TextView)findViewById(R.id.text_check_regular);
    text_check_small_code=(TextView)findViewById(R.id.text_check_small);
    text_check_large_code=(TextView)findViewById(R.id.text_check_large);

    text_price_regular_code=(TextView)findViewById(R.id.text_price_regular);
    text_price_small_code=(TextView)findViewById(R.id.text_price_small);
    text_price_large_code=(TextView)findViewById(R.id.text_price_large);



    edit_qty_regular_code=(EditText)findViewById(R.id.edit_qty_regular);
    edit_qty_small_code=(EditText)findViewById(R.id.edit_qty_small);
    edit_qty_large_code=(EditText)findViewById(R.id.edit_qty_large);



    chk_regular_code=(CheckBox)findViewById(R.id.chk_regular);
    chk_small_code=(CheckBox)findViewById(R.id.chk_small);
    chk_large_code=(CheckBox)findViewById(R.id.chk_large);



    checkBoxListener =new OnClickListener() 

        public void onClick(View v) 

            if(chk_regular_code.isChecked())
            
                text_price_regular_code.setText
                (text_regular_code.getText().toString());
                text_check_regular_code.setText
                (chk_regular_code.getText().toString());

            
            else 
                text_price_regular_code.setText("");
                text_check_regular_code.setText("");
                edit_qty_regular_code.setText("");
            


            if(chk_small_code.isChecked())
            
                text_price_small_code.setText
                (text_small_code.getText().toString());
                text_check_small_code.setText
                (chk_small_code.getText().toString());

            
            else 
                text_price_small_code.setText("");
                text_check_small_code.setText("");
                edit_qty_small_code.setText("");
            

            if(chk_large_code.isChecked())
            
                text_price_large_code.setText
                (text_large_code.getText().toString());
                text_check_large_code.setText
                (chk_large_code.getText().toString());

            
            else 
                text_price_large_code.setText("");
                text_check_large_code.setText("");
                edit_qty_large_code.setText("");
            
            // whenever i use below code getting error "start"

            x=Double.parseDouble
                    (text_price_regular_code.getText().toString());
            y=Double.parseDouble
                    (text_price_small_code.getText().toString());
            z=Double.parseDouble
                    (text_price_large_code.getText().toString());           
            a=x+y+z;
            text_total_code.setText(Double.toString(a));
            // whenever i use below code getting error "end"
        
    ;

    chk_regular_code.setOnClickListener(checkBoxListener);
    chk_small_code.setOnClickListener(checkBoxListener);
    chk_large_code.setOnClickListener(checkBoxListener);

【问题讨论】:

请停止重复同样的问题。对于同一个问题,您已经有 2 个问题未解决。使用这些,并开始提供您被要求的信息。您正在发送垃圾邮件。我问过你 3 次 - 你试图添加的文本视图中的三个值是什么。为什么这么难理解? 【参考方案1】:

我会忽略这一点。您看到的消息在手机上很重要,但在模拟器中不重要。模拟器非常慢。您所做的一切都不是资源密集型的,因此您的应用程序应该名义上在设备上执行。

在设备上,您可以在某些手机上使用开发者选项来启用可见信号,表明您可能在前台工作过多。在我的 Galaxy Nexus 上,我可以导航到设置 > 开发人员选项 > 启用严格模式。选中该框会导致任何应用程序周围出现红色边框,当它导致出现您从 logcat 发布的消息时。

消除警告的解决方案是线程,但我觉得您可能正在努力解决非问题。唯一知道的方法是设备测试。

【讨论】:

以上是关于Logcat 说 - 应用程序可能在其主线程上做了太多工作,并且错误消息说 - StringtoReal.invalidReal(string.boolean)line:63 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Flutter WebView 跳过了 30 帧!应用程序可能在其主线程上做了太多工作

Choreographer: Skipped frames : 应用程序可能在其主线程上做太多工作

对服务使用 AsyncTask 类仍然得到“跳过 31 帧!应用程序可能在其主线程上做太多工作。”。为啥?

编舞跳帧!多少算太多?

应用程序可能在 Andriod 中的主线程(Firebase 数据库)上做了太多工作

应用程序在其主键字段的对象 ID 的核心数据中崩溃