2016-01-13 36 views
2

虽然我试图执行下面的方法,但我总是收到错误“跳过n帧!应用程序可能在其主线程上做了太多工作。”我曾试图打破这样的线和像这样的线在主线程上做了太多工作的应用程序

Thread thread = new Thread() { 
@Override 
public void run() { 
    try { 
     // for or while loop here 
     } 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
}; 

thread.start(); 

然而,那也没有工作。任何可能的修补程序?

public void newSim(int x) { 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 
    int height = size.y; 

    int buttonWidth = (int) (width * 0.15); 
    int buttonWidth1 = (int) (width * 0.20); 
    int buttonHeight1 = (int) (height * 0.20); 

    ArrayList<Point> intersection = new ArrayList<Point>(); 
    final ArrayList<Point> location = new ArrayList<Point>(); 

    int constraint = 0; 

    int xC = width - buttonWidth1; 
    int yC = height - buttonWidth1; 

    for (int i = 0; i < x; i++) { 
     for (int j = 0; j < x; i++) { 
      location.add(new Point(i, j)); 
      constraint++; 
     } 
    } 

    for (int i = 0; i < x; i++) { 
     Random random = new Random(); 
     Point point = new Point(); 
     point = location.remove(random.nextInt(constraint)); 
     while (intersection.contains(point)) { 
      intersection.add(point); 
      point = location.remove(random.nextInt(constraint)); 
     } 
    Button but1 = new Button(this); 
    but1.setText(String.valueOf(i)); 
    RelativeLayout r = (RelativeLayout) findViewById(R.id.playLayout); 
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(buttonWidth, buttonWidth); 
    layoutParams.setMargins(0, 0, buttonWidth, buttonWidth); 
    but1.setLayoutParams(layoutParams); 
    r.addView(but1); 
    constraint--; 
    } 
} 
+0

这是在仿真器或真实设备? –

+0

在模拟器上,这可能是为什么?编辑:我实际上在手机上试过它相同的问题 – MJJLAM

+0

我在亚行看到这个日志很多,特别是在使用模拟器时,我认为它不是一个非常糟糕的问题 –

回答

1

你在for循环中运行什么? newSim()?该方法对其有UI操作。所以它不能在不同的线程中运行。

+0

是的我想通了,我没有在for循环中运行newSim,newSim被调用onCreate – MJJLAM

+0

是的。我不得不写一个答案,因为我无法对原文发表评论。 – bhiku

0

为什么要添加的点,如果它在列表中

while (intersection.contains(point)) { 
      intersection.add(point); 
      point = location.remove(random.nextInt(constraint)); 
} 

已经存在,你应该使用while(!intersaction.contains())

相关问题