请教The application may be doing too much work on its main thread.问题

时间:2021-09-11 21:23:58

请教一下各位大侠是什么原因? 谢谢!

代码如下:
package com.shopnc_local_life.android.ui;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.TabHost;

import com.shopnc_local_life.android.R;
import com.shopnc_local_life.android.common.MyApp;
import com.shopnc_local_life.android.ui.home.HomeActivity;
import com.shopnc_local_life.android.ui.more.MoreActivity;
import com.shopnc_local_life.android.ui.my.MyActivity;
import com.shopnc_local_life.android.ui.topic.TopicActivity;
import com.shopnc_local_life.android.ui.tuan.TuanAcitivity;
import com.shopnc_local_life.android.ui.youhuiquan.YouHuiQuanActivity;
import com.shopnc_local_life.android.widget.MyMainOutDialog;

public class MainActivity extends TabActivity{
/** tab标签名*/
public final static String TAB_TAG_HOME = "home";
public final static String TAB_TAG_TEST1 = "test1";
public final static String TAB_TAG_TEST2 = "test2";
public final static String TAB_TAG_TEST3 = "test3";
public final static String TAB_TAG_TEST4 = "test4";
public final static String TAB_TAG_TEST5 = "test5";

private TabHost tabHost;

/** 启动每个操作项的Intent */
private Intent homeIntent;
private Intent test1Intent;
private Intent test2Intent;
private Intent test3Intent;
private Intent test4Intent;
private Intent test5Intent;

/** 界面上的各个单选按钮 */
private RadioButton btn_home;
private RadioButton btn_test1;
private RadioButton btn_test2;
private RadioButton btn_test3;
private RadioButton btn_test4;
private RadioButton btn_test5;

private String city_name;

private MyApp myApp; 

public MyMainOutDialog dialog;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_main);

myApp = (MyApp) MainActivity.this.getApplication();

dialog=new MyMainOutDialog(MainActivity.this);

city_name=MainActivity.this.getIntent().getStringExtra("city_name");

homeIntent = new Intent(this, HomeActivity.class);
homeIntent.putExtra("city_name", city_name);
test1Intent = new Intent(this, TuanAcitivity.class);
test2Intent = new Intent(this, YouHuiQuanActivity.class);
test3Intent = new Intent(this, MyActivity.class);
test4Intent = new Intent(this, MoreActivity.class);
test5Intent = new Intent(this, TopicActivity.class);

tabHost = this.getTabHost();
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_HOME).setIndicator(TAB_TAG_HOME).setContent(homeIntent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST1).setIndicator(TAB_TAG_TEST1).setContent(test1Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST2).setIndicator(TAB_TAG_TEST2).setContent(test2Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST3).setIndicator(TAB_TAG_TEST3).setContent(test3Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST4).setIndicator(TAB_TAG_TEST4).setContent(test4Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST5).setIndicator(TAB_TAG_TEST5).setContent(test5Intent));

tabHost.setCurrentTab(0);
////////////////////// find View ////////////////////////////
btn_home = (RadioButton)this.findViewById(R.id.main_index_search);
btn_test1 = (RadioButton)this.findViewById(R.id.main_index_tuan);
btn_test2 = (RadioButton)this.findViewById(R.id.main_index_checkin);
btn_test3 = (RadioButton)this.findViewById(R.id.main_index_my);
btn_test4 = (RadioButton)this.findViewById(R.id.main_index_more);
btn_test5 = (RadioButton)this.findViewById(R.id.main_index_topic);

myApp.setFirst_start_flag("1");
myApp.setTabHost(tabHost);
myApp.setBtn_test2(btn_test2);

MyRadioButtonClickListener listener = new MyRadioButtonClickListener();
btn_home.setOnClickListener(listener);
btn_test1.setOnClickListener(listener);
btn_test2.setOnClickListener(listener);
btn_test3.setOnClickListener(listener);
btn_test4.setOnClickListener(listener);
btn_test5.setOnClickListener(listener);

dialog.text_btu_on.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.this.finish();
}
});
dialog.text_btu_off.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});

}

class MyRadioButtonClickListener implements View.OnClickListener{
public void onClick(View v) {
RadioButton btn = (RadioButton)v;
switch(btn.getId()){
case R.id.main_index_search:
new Thread(){
public void run(){
tabHost.setCurrentTabByTag(TAB_TAG_HOME);
}
}.start();
break;
case R.id.main_index_tuan:
new Thread(){
public void run(){
tabHost.setCurrentTabByTag(TAB_TAG_TEST1);
}
}.start();

break;
case R.id.main_index_checkin:
new Thread(){
public void run(){
tabHost.setCurrentTabByTag(TAB_TAG_TEST2);
}
}.start();
break;
case R.id.main_index_my:
new Thread(){
public void run(){
tabHost.setCurrentTabByTag(TAB_TAG_TEST3);
}
}.start();
break;
case R.id.main_index_more:
new Thread(){
public void run(){
tabHost.setCurrentTabByTag(TAB_TAG_TEST4);
}
}.start();

break;
case R.id.main_index_topic:
new Thread(){
public void run(){
tabHost.setCurrentTabByTag(TAB_TAG_TEST5);
}
}.start();

break;
}
}
}
}

日志:
05-20 21:31:10.673: D/dalvikvm(846): GC_FOR_ALLOC freed 1725K, 11% free 15488K/17336K, paused 65ms, total 102ms
05-20 21:31:10.743: I/Choreographer(846): Skipped 93 frames!  The application may be doing too much work on its main thread.
05-20 21:31:12.624: I/Choreographer(846): Skipped 71 frames!  The application may be doing too much work on its main thread.
05-20 21:31:13.383: W/dalvikvm(846): threadid=11: thread exiting with uncaught exception (group=0x414c4700)
05-20 21:31:13.383: E/AndroidRuntime(846): FATAL EXCEPTION: pool-1-thread-1
05-20 21:31:13.383: E/AndroidRuntime(846): java.lang.NullPointerException
05-20 21:31:13.383: E/AndroidRuntime(846):  at com.shopnc_local_life.android.handler.RemoteDataHandler$2.run(RemoteDataHandler.java:88)
05-20 21:31:13.383: E/AndroidRuntime(846):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-20 21:31:13.383: E/AndroidRuntime(846):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-20 21:31:13.383: E/AndroidRuntime(846):  at java.lang.Thread.run(Thread.java:841)
05-20 21:31:15.713: I/Choreographer(846): Skipped 57 frames!  The application may be doing too much work on its main thread.
05-20 21:31:17.513: I/Choreographer(846): Skipped 100 frames!  The application may be doing too much work on its main thread.
05-20 21:31:18.203: I/Process(846): Sending signal. PID: 846 SIG: 9

9 个解决方案

#1


那个警告信息你可以不用管,不过你的代码里面 new Thread好像多余的。

new Thread(){
     public void run(){
           tabHost.setCurrentTabByTag(TAB_TAG_TEST4);
     }
}.start();
这个看起来弄个线程多余。

#2


he application may be doing too much work on its main thread 是因为你UI刷新太快了,屏幕丢帧了,和程序挂了没关系。程序挂了是run方法你发生空指针异常了。

#3



重新整理一下代码:
package com.shopnc_local_life.android.ui;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.TabHost;

import com.shopnc_local_life.android.R;
import com.shopnc_local_life.android.common.MyApp;
import com.shopnc_local_life.android.ui.home.HomeActivity;
import com.shopnc_local_life.android.ui.more.MoreActivity;
import com.shopnc_local_life.android.ui.my.MyActivity;
import com.shopnc_local_life.android.ui.topic.TopicActivity;
import com.shopnc_local_life.android.ui.tuan.TuanAcitivity;
import com.shopnc_local_life.android.ui.youhuiquan.YouHuiQuanActivity;
import com.shopnc_local_life.android.widget.MyMainOutDialog;

public class MainActivity extends TabActivity{
/** tab标签名*/
public final static String TAB_TAG_HOME = "home";
public final static String TAB_TAG_TEST1 = "test1";
public final static String TAB_TAG_TEST2 = "test2";
public final static String TAB_TAG_TEST3 = "test3";
public final static String TAB_TAG_TEST4 = "test4";
public final static String TAB_TAG_TEST5 = "test5";

private TabHost tabHost;

/** 启动每个操作项的Intent */
private Intent homeIntent;
private Intent test1Intent;
private Intent test2Intent;
private Intent test3Intent;
private Intent test4Intent;
private Intent test5Intent;

/** 界面上的各个单选按钮 */
private RadioButton btn_home;
private RadioButton btn_test1;
private RadioButton btn_test2;
private RadioButton btn_test3;
private RadioButton btn_test4;
private RadioButton btn_test5;

private String city_name;

private MyApp myApp; 

public MyMainOutDialog dialog;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_main);

myApp = (MyApp) MainActivity.this.getApplication();

dialog=new MyMainOutDialog(MainActivity.this);

city_name=MainActivity.this.getIntent().getStringExtra("city_name");

homeIntent = new Intent(this, HomeActivity.class);
homeIntent.putExtra("city_name", city_name);
test1Intent = new Intent(this, TuanAcitivity.class);
test2Intent = new Intent(this, YouHuiQuanActivity.class);
test3Intent = new Intent(this, MyActivity.class);
test4Intent = new Intent(this, MoreActivity.class);
test5Intent = new Intent(this, TopicActivity.class);

tabHost = this.getTabHost();
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_HOME).setIndicator(TAB_TAG_HOME).setContent(homeIntent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST1).setIndicator(TAB_TAG_TEST1).setContent(test1Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST2).setIndicator(TAB_TAG_TEST2).setContent(test2Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST3).setIndicator(TAB_TAG_TEST3).setContent(test3Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST4).setIndicator(TAB_TAG_TEST4).setContent(test4Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST5).setIndicator(TAB_TAG_TEST5).setContent(test5Intent));

tabHost.setCurrentTab(0);
////////////////////// find View ////////////////////////////
btn_home = (RadioButton)this.findViewById(R.id.main_index_search);
btn_test1 = (RadioButton)this.findViewById(R.id.main_index_tuan);
btn_test2 = (RadioButton)this.findViewById(R.id.main_index_checkin);
btn_test3 = (RadioButton)this.findViewById(R.id.main_index_my);
btn_test4 = (RadioButton)this.findViewById(R.id.main_index_more);
btn_test5 = (RadioButton)this.findViewById(R.id.main_index_topic);

myApp.setFirst_start_flag("1");
myApp.setTabHost(tabHost);
myApp.setBtn_test2(btn_test2);

MyRadioButtonClickListener listener = new MyRadioButtonClickListener();
btn_home.setOnClickListener(listener);
btn_test1.setOnClickListener(listener);
btn_test2.setOnClickListener(listener);
btn_test3.setOnClickListener(listener);
btn_test4.setOnClickListener(listener);
btn_test5.setOnClickListener(listener);

dialog.text_btu_on.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.this.finish();
}
});
dialog.text_btu_off.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});

}

class MyRadioButtonClickListener implements View.OnClickListener{
public void onClick(View v) {
RadioButton btn = (RadioButton)v;
switch(btn.getId()){
case R.id.main_index_search:
tabHost.setCurrentTabByTag(TAB_TAG_HOME);
break;
case R.id.main_index_tuan:
tabHost.setCurrentTabByTag(TAB_TAG_TEST1);
break;
case R.id.main_index_checkin:
tabHost.setCurrentTabByTag(TAB_TAG_TEST2);
break;
case R.id.main_index_my:
tabHost.setCurrentTabByTag(TAB_TAG_TEST3);
break;
case R.id.main_index_more:
tabHost.setCurrentTabByTag(TAB_TAG_TEST4);
break;
case R.id.main_index_topic:
tabHost.setCurrentTabByTag(TAB_TAG_TEST5);
break;
}
}
}
}

#4


引用 1 楼 birdsaction 的回复:
那个警告信息你可以不用管,不过你的代码里面 new Thread好像多余的。

new Thread(){
     public void run(){
           tabHost.setCurrentTabByTag(TAB_TAG_TEST4);
     }
}.start();
这个看起来弄个线程多余。


可我的程序在这里出错,跑不起来啊,就是这个原因?

#5


引用 2 楼 blovecat 的回复:
he application may be doing too much work on its main thread 是因为你UI刷新太快了,屏幕丢帧了,和程序挂了没关系。程序挂了是run方法你发生空指针异常了。

应该怎么修改呢? 新手不太懂啊。 

#6


我也是这个问题,屏幕丢帧了,可能是线程开多了

#7


同求。。。。。。

#8


同求,哪个大神帅哥哥解答一下啦!谢谢!

#9


该回复于2017-12-11 08:48:10被管理员删除

#1


那个警告信息你可以不用管,不过你的代码里面 new Thread好像多余的。

new Thread(){
     public void run(){
           tabHost.setCurrentTabByTag(TAB_TAG_TEST4);
     }
}.start();
这个看起来弄个线程多余。

#2


he application may be doing too much work on its main thread 是因为你UI刷新太快了,屏幕丢帧了,和程序挂了没关系。程序挂了是run方法你发生空指针异常了。

#3



重新整理一下代码:
package com.shopnc_local_life.android.ui;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.TabHost;

import com.shopnc_local_life.android.R;
import com.shopnc_local_life.android.common.MyApp;
import com.shopnc_local_life.android.ui.home.HomeActivity;
import com.shopnc_local_life.android.ui.more.MoreActivity;
import com.shopnc_local_life.android.ui.my.MyActivity;
import com.shopnc_local_life.android.ui.topic.TopicActivity;
import com.shopnc_local_life.android.ui.tuan.TuanAcitivity;
import com.shopnc_local_life.android.ui.youhuiquan.YouHuiQuanActivity;
import com.shopnc_local_life.android.widget.MyMainOutDialog;

public class MainActivity extends TabActivity{
/** tab标签名*/
public final static String TAB_TAG_HOME = "home";
public final static String TAB_TAG_TEST1 = "test1";
public final static String TAB_TAG_TEST2 = "test2";
public final static String TAB_TAG_TEST3 = "test3";
public final static String TAB_TAG_TEST4 = "test4";
public final static String TAB_TAG_TEST5 = "test5";

private TabHost tabHost;

/** 启动每个操作项的Intent */
private Intent homeIntent;
private Intent test1Intent;
private Intent test2Intent;
private Intent test3Intent;
private Intent test4Intent;
private Intent test5Intent;

/** 界面上的各个单选按钮 */
private RadioButton btn_home;
private RadioButton btn_test1;
private RadioButton btn_test2;
private RadioButton btn_test3;
private RadioButton btn_test4;
private RadioButton btn_test5;

private String city_name;

private MyApp myApp; 

public MyMainOutDialog dialog;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_main);

myApp = (MyApp) MainActivity.this.getApplication();

dialog=new MyMainOutDialog(MainActivity.this);

city_name=MainActivity.this.getIntent().getStringExtra("city_name");

homeIntent = new Intent(this, HomeActivity.class);
homeIntent.putExtra("city_name", city_name);
test1Intent = new Intent(this, TuanAcitivity.class);
test2Intent = new Intent(this, YouHuiQuanActivity.class);
test3Intent = new Intent(this, MyActivity.class);
test4Intent = new Intent(this, MoreActivity.class);
test5Intent = new Intent(this, TopicActivity.class);

tabHost = this.getTabHost();
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_HOME).setIndicator(TAB_TAG_HOME).setContent(homeIntent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST1).setIndicator(TAB_TAG_TEST1).setContent(test1Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST2).setIndicator(TAB_TAG_TEST2).setContent(test2Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST3).setIndicator(TAB_TAG_TEST3).setContent(test3Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST4).setIndicator(TAB_TAG_TEST4).setContent(test4Intent));
tabHost.addTab(tabHost.newTabSpec(TAB_TAG_TEST5).setIndicator(TAB_TAG_TEST5).setContent(test5Intent));

tabHost.setCurrentTab(0);
////////////////////// find View ////////////////////////////
btn_home = (RadioButton)this.findViewById(R.id.main_index_search);
btn_test1 = (RadioButton)this.findViewById(R.id.main_index_tuan);
btn_test2 = (RadioButton)this.findViewById(R.id.main_index_checkin);
btn_test3 = (RadioButton)this.findViewById(R.id.main_index_my);
btn_test4 = (RadioButton)this.findViewById(R.id.main_index_more);
btn_test5 = (RadioButton)this.findViewById(R.id.main_index_topic);

myApp.setFirst_start_flag("1");
myApp.setTabHost(tabHost);
myApp.setBtn_test2(btn_test2);

MyRadioButtonClickListener listener = new MyRadioButtonClickListener();
btn_home.setOnClickListener(listener);
btn_test1.setOnClickListener(listener);
btn_test2.setOnClickListener(listener);
btn_test3.setOnClickListener(listener);
btn_test4.setOnClickListener(listener);
btn_test5.setOnClickListener(listener);

dialog.text_btu_on.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.this.finish();
}
});
dialog.text_btu_off.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});

}

class MyRadioButtonClickListener implements View.OnClickListener{
public void onClick(View v) {
RadioButton btn = (RadioButton)v;
switch(btn.getId()){
case R.id.main_index_search:
tabHost.setCurrentTabByTag(TAB_TAG_HOME);
break;
case R.id.main_index_tuan:
tabHost.setCurrentTabByTag(TAB_TAG_TEST1);
break;
case R.id.main_index_checkin:
tabHost.setCurrentTabByTag(TAB_TAG_TEST2);
break;
case R.id.main_index_my:
tabHost.setCurrentTabByTag(TAB_TAG_TEST3);
break;
case R.id.main_index_more:
tabHost.setCurrentTabByTag(TAB_TAG_TEST4);
break;
case R.id.main_index_topic:
tabHost.setCurrentTabByTag(TAB_TAG_TEST5);
break;
}
}
}
}

#4


引用 1 楼 birdsaction 的回复:
那个警告信息你可以不用管,不过你的代码里面 new Thread好像多余的。

new Thread(){
     public void run(){
           tabHost.setCurrentTabByTag(TAB_TAG_TEST4);
     }
}.start();
这个看起来弄个线程多余。


可我的程序在这里出错,跑不起来啊,就是这个原因?

#5


引用 2 楼 blovecat 的回复:
he application may be doing too much work on its main thread 是因为你UI刷新太快了,屏幕丢帧了,和程序挂了没关系。程序挂了是run方法你发生空指针异常了。

应该怎么修改呢? 新手不太懂啊。 

#6


我也是这个问题,屏幕丢帧了,可能是线程开多了

#7


同求。。。。。。

#8


同求,哪个大神帅哥哥解答一下啦!谢谢!

#9


该回复于2017-12-11 08:48:10被管理员删除