我想在我需要使用它们之前做一些drawables的加载并缩放它们。这是在onCreate()的最后完成的。
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < Teams.getTeamA().size(); i++) {
ViewGroup playerLayout = (ViewGroup) inflaterEnd.inflate(R.layout.flip_player_layout, null);
updatePlayerLayout(playerLayout, R.drawable.card_team_blue, 0, Teams.getTeamA().get(i));
// Adds the layout to the cardArray
cardArray.add(playerLayout);
// Adds the image of the playercard into the bmapArray and scales it
bmapArray.add(scaleImage(R.drawable.card_big_anoffendedenglishman, scaleFactorDraw));
}
for (int i = 0; i < Teams.getTeamB().size(); i++) {
ViewGroup playerLayout = (ViewGroup) inflaterEnd.inflate(R.layout.flip_player_layout, null);
updatePlayerLayout(playerLayout, R.drawable.card_team_red, 1, Teams.getTeamB().get(i));
cardArray.add(playerLayout);
bmapArray.add(scaleImage(R.drawable.card_big_ancientegypt, scaleFactorDraw));
}
// End layout
ViewGroup endLayout = (ViewGroup) inflaterEnd.inflate(R.layout.flip_start_layout, null);
ImageView imageEnd = (ImageView) endLayout.getChildAt(0);
imageEnd.setImageBitmap(scaleImage(R.drawable.card_big_placeholder, scaleFactorLayout));
cardArray.add(endLayout);
}
}).start();
private void updatePlayerLayout(ViewGroup playerLayout, int layoutDrawable, int teamPos, Player player)
ImageView image1 = (ImageView) playerLayout.getChildAt(0);
image1.setImageBitmap(scaleImage(layoutDrawable, scaleFactorLayout));
// CardBack
ImageView image3 = (ImageView) ((ConstraintLayout) playerLayout.getChildAt(4)).getChildAt(0);
image3.setImageBitmap(scaleImage(R.drawable.card_big_cardback_beta, scaleFactorDraw));
这在我的模拟器上运行正常,并且不会导致我的应用程序崩溃。当我在手机上加载应用程序时出现问题。 它会加载活动,但几秒后我收到消息&#34; YourApp已停止&#34;。
当我将线程的工作(Lower TeamA和TeamB大小)限制为每个1时,应用程序按预期工作。
我试图将任务划分为多个线程,并且我尝试使用AsyncTask但似乎没有任何工作。我错过了什么?
答案 0 :(得分:0)
将图像加载到ImageView中会占用大量内存。您可以使用监视手机的调试器,检查它是否在崩溃时抛出OutOfMemoryError。 并且有一些库用于加载具有更好内存管理的图像,例如Glide。
答案 1 :(得分:0)
问题是OutOfMemoryError。我使用的修复程序是将以下代码应用于Manifest.xml文件:
android:largeHeap="true"