該方法從內置圖庫中提取圖像並將其以紋理的形式提交給屏幕。我還將選擇的圖像存儲在每次用戶進入該屏幕時要顯示的文件中。問題是,當我上傳,讓說,在連續3個圖像,我收到控制檯內存警告,後來導致應用程序崩潰是由於內存錯誤:由於圖像存儲引起的內存崩潰
AppLauncher failed with an exception: java.lang.RunTimeException: The app crashed: Terminated due to Memory Error
很難查明這種情況的確切原因。但是我已經調試並記錄了一點,似乎沒有將圖像寫入文件導致它。它與刪除已存在的圖像然後上載替換的動作更相關。當我讓用戶刪除他們的圖像時,整個文件被刪除並且紋理被丟棄。我還注意到,當用戶上傳了一些圖像並退出屏幕時,它會因爲內存錯誤而崩潰。所有的
FileHandle fileIOS1 = Gdx.files.external("iosImage1.png");
FileHandle fileIOS2 = Gdx.files.external("iosImage2.png");
FileHandle fileIOS3 = Gdx.files.external("iosImage3.png");
FileHandle fileIOS4 = Gdx.files.external("iosImage4_.png");
FileHandle fileIOS5 = Gdx.files.external("iosImage5.png");
FileHandle fileIOS6 = Gdx.files.external("iosImage6.png");
FileHandle fileIOS7 = Gdx.files.external("iosImage7.png");
FileHandle fileIOS8 = Gdx.files.external("iosImage8.png");
FileHandle fileIOS9 = Gdx.files.external("iosImage9.png");
FileHandle fileIOS10 = Gdx.files.external("iosImage10.png");
FileHandle fileIOS11 = Gdx.files.external("iosImage11.png");
FileHandle fileIOS12 = Gdx.files.external("iosImage12.png");
public GalleryScreen(MainClass game) {
if(game.isIOS()){
if(fileIOS1.exists()) {
imageSelected1 = new Texture(fileIOS1);
}
if(fileIOS2.exists()) {
imageSelected2 = new Texture(fileIOS2);
}
if(fileIOS3.exists()) {
imageSelected3 = new Texture(fileIOS3);
}
if(fileIOS4.exists()) {
imageSelected4 = new Texture(fileIOS4);
}
if(fileIOS5.exists()) {
imageSelected5 = new Texture(fileIOS5);
}
if(fileIOS6.exists()) {
imageSelected6 = new Texture(fileIOS6);
}
if(fileIOS7.exists()) {
imageSelected7 = new Texture(fileIOS7);
}
if(fileIOS8.exists()) {
imageSelected8 = new Texture(fileIOS8);
}
if(fileIOS9.exists()) {
imageSelected9 = new Texture(fileIOS9);
}
if(fileIOS10.exists()) {
imageSelected10 = new Texture(fileIOS10);
}
if(fileIOS11.exists()) {
imageSelected11 = new Texture(fileIOS11);
}
if(fileIOS12.exists()) {
imageSelected12 = new Texture(fileIOS12);
}
}
@Override
public void show() {
if(game.isIOS()){
if(fileIOS1.exists()) {
selected1 = new TextureRegionDrawable(new TextureRegion(imageSelected1));
style2.up = skin.newDrawable(skin.newDrawable(selected1));
style2.down = skin.newDrawable(skin.newDrawable(selected1));
}
if(!fileIOS1.exists()){
style2.up = skin.newDrawable(skin.newDrawable(temp));
style2.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS2.exists()) {
selected2 = new TextureRegionDrawable(new TextureRegion(imageSelected2));
style3.up = skin.newDrawable(skin.newDrawable(selected2));
style3.down = skin.newDrawable(skin.newDrawable(selected2));
}
if(!fileIOS2.exists()){
style3.up = skin.newDrawable(skin.newDrawable(temp));
style3.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS3.exists()){
selected3 = new TextureRegionDrawable(new TextureRegion(imageSelected3));
style4.up = skin.newDrawable(skin.newDrawable(selected3));
style4.down = skin.newDrawable(skin.newDrawable(selected3));
}
if(!fileIOS3.exists()){
style4.up = skin.newDrawable(skin.newDrawable(temp));
style4.down = skin.newDrawable(skin.newDrawable(temp));
}
Gdx.app.log("HERE:", "6");
if(fileIOS4.exists()){
selected4 = new TextureRegionDrawable(new TextureRegion(imageSelected4));
style5.up = skin.newDrawable(skin.newDrawable(selected4));
style5.down = skin.newDrawable(skin.newDrawable(selected4));
}
Gdx.app.log("HERE:", "7");
if(!fileIOS4.exists()){
style5.up = skin.newDrawable(skin.newDrawable(temp));
style5.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS5.exists()){
selected5 = new TextureRegionDrawable(new TextureRegion(imageSelected5));
style6.up = skin.newDrawable(skin.newDrawable(selected5));
style6.down = skin.newDrawable(skin.newDrawable(selected5));
}
if(!fileIOS5.exists()){
style6.up = skin.newDrawable(skin.newDrawable(temp));
style6.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS6.exists()){
selected6 = new TextureRegionDrawable(new TextureRegion(imageSelected6));
style7.up = skin.newDrawable(skin.newDrawable(selected6));
style7.down = skin.newDrawable(skin.newDrawable(selected6));
}
if(!fileIOS6.exists()){
style7.up = skin.newDrawable(skin.newDrawable(temp));
style7.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS7.exists()){
selected7 = new TextureRegionDrawable(new TextureRegion(imageSelected7));
style8.up = skin.newDrawable(skin.newDrawable(selected7));
style8.down = skin.newDrawable(skin.newDrawable(selected7));
}
if(!fileIOS7.exists()){
style8.up = skin.newDrawable(skin.newDrawable(temp));
style8.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS8.exists()){
selected8 = new TextureRegionDrawable(new TextureRegion(imageSelected8));
style9.up = skin.newDrawable(skin.newDrawable(selected8));
style9.down = skin.newDrawable(skin.newDrawable(selected8));
}
if(!fileIOS8.exists()){
style9.up = skin.newDrawable(skin.newDrawable(temp));
style9.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS9.exists()){
selected9 = new TextureRegionDrawable(new TextureRegion(imageSelected9));
style10.up = skin.newDrawable(skin.newDrawable(selected9));
style10.down = skin.newDrawable(skin.newDrawable(selected9));
}
if(!fileIOS9.exists()){
style10.up = skin.newDrawable(skin.newDrawable(temp));
style10.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS10.exists()){
selected10 = new TextureRegionDrawable(new TextureRegion(imageSelected10));
style11.up = skin.newDrawable(skin.newDrawable(selected10));
style11.down = skin.newDrawable(skin.newDrawable(selected10));
}
if(!fileIOS10.exists()){
style11.up = skin.newDrawable(skin.newDrawable(temp));
style11.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS11.exists()){
selected11 = new TextureRegionDrawable(new TextureRegion(imageSelected11));
style12.up = skin.newDrawable(skin.newDrawable(selected11));
style12.down = skin.newDrawable(skin.newDrawable(selected11));
}
if(!fileIOS11.exists()){
style12.up = skin.newDrawable(skin.newDrawable(temp));
style12.down = skin.newDrawable(skin.newDrawable(temp));
}
if(fileIOS12.exists()){
selected12 = new TextureRegionDrawable(new TextureRegion(imageSelected12));
style13.up = skin.newDrawable(skin.newDrawable(selected12));
style13.down = skin.newDrawable(skin.newDrawable(selected12));
}
if(!fileIOS12.exists()){
style13.up = skin.newDrawable(skin.newDrawable(temp));
style13.down = skin.newDrawable(skin.newDrawable(temp));
}
}boxImage1.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
if(!fileIOS1.exists()) {
new Thread(new Runnable() {
@Override
public void run() {
gallery.iosPickImage1();
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
imageSelected1 = new Texture(fileIOS1);
selected1 = new TextureRegionDrawable(new TextureRegion(imageSelected1));
style2.up = skin.newDrawable(skin.newDrawable(selected1));
style2.down = skin.newDrawable(skin.newDrawable(selected1));
}
});
}
}).start();
}
if(!fileIOS2.exists()) {
new Thread(new Runnable() {
@Override
public void run() {
gallery.iosPickImage2();
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
Gdx.app.log("CREATING IMAGE" , "1");
imageSelected2 = new Texture(fileIOS2);
Gdx.app.log("CREATING IMAGE" , "2");
selected2 = new TextureRegionDrawable(new TextureRegion(imageSelected2));
Gdx.app.log("CREATING IMAGE" , "3");
style3.up = skin.newDrawable(skin.newDrawable(selected2));
style3.down = skin.newDrawable(skin.newDrawable(selected2));
}
});
}
}).start();
}
欣賞您的輸入! 1.什麼是「乾淨」的方法? GC =垃圾收集器?如何調用它? 2.將「文件」直接加載到TRD中? 3.這是我缺乏正規教育使我退縮的原因。我不是很喜歡Array,或者爲這種方式編寫動態代碼。 4/5。奧基。我只是從libgdx的維基上取得這個方法。它非常合適,因爲我想在一個線程中爲用戶選擇一個圖像打開畫廊,並在完成後爲postRunnable打開,然後將所選圖像寫入紋理。 – Benni
要保持一種方法,所有你用一張圖片做的事情都很簡單,而不是維護你寫的所有代碼。 'System.gc()'不要忘記這是不好的做法,但在某些情況下它是需要的。 Es direkt進入TRD,例如:'selected1 = new TextureRegionDrawable(new TextureRegion(new Texture(fileIOS1)));'是的,libgdx使用它來爲下一幀發佈runnables,但它不是平行的。在Arraylist和動態方法你需要工作,因爲這是很好的閱讀和維護。儘量避免兩次寫同樣的東西。 – BennX
所以一個方法應該仍然只是處理一個圖像?只是我在一個地方處理整個「把文件內容放在屏幕上」?如果我正確理解你的話? – Benni