2015-10-15 3 views
0

Я экстремальный Android/Java-новичок, работающий над своим первым Android-приложением.Android-страница сбой во время загрузки изображения

У меня есть страница, которая загружает данные со страницы php/mySQL и отображает ее на макете экрана. Данные будут содержать определенные поля; название, резюме, фотография и т. д. Поле «фото» - это URL-адрес изображения, хранящегося в Интернете.

Когда поле ссылки для ссылок пуст, страница, похоже, работает нормально. Когда изображение довольно маленькое, страница, похоже, работает нормально. Но когда изображение имеет больший размер, приложение падает.

Мой полный код для этой страницы показан ниже, так как у меня нет идеи, где проблема может быть с этим кодом!

import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Color; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.RelativeLayout.LayoutParams; 
import android.widget.TextView; 
import android.widget.Toast; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.InputStream; 

public class DetailScreen extends android.support.v4.app.Fragment { 
RelativeLayout relativeLayout; 

ProgressDialog progressDialog; 
DownloadImageTask d; 
ImageView imageView; 
int tab,position; 

ImageView detail_image; 
TextView detail_head; 
TextView detail_disc; 
TextView detail_date; 
TextView detail_detail; 
TextView detail_url; 

Bitmap imageBitmap = null; 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelable("imageBitmap",imageBitmap); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(savedInstanceState != null) { 
     imageBitmap = savedInstanceState.getParcelable("imageBitmap"); 
    } 

    Bundle bundle = this.getArguments(); 
    if(bundle != null) { 
     tab = bundle.getInt(BackEnd.TAB); 
     position = bundle.getInt(BackEnd.POSITION); 
    } 
} 

void setValues() 
{ 

    JSONArray RawData = (tab == 0) ? BackEnd.news : BackEnd.events; 
    JSONObject data = null; 

    try { 
     data = (JSONObject) RawData.get(position); 
    } 
    catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    try { 
     assert data != null; 
     if(imageBitmap == null) { 
      d = new DownloadImageTask(detail_image); 
      d.execute((String) data.get("photograph")); 
      progressDialog = new ProgressDialog(getActivity()); 
      progressDialog.setMessage("Loading Image"); 
      progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
       @Override 
       public void onCancel(DialogInterface dialog) { 
        d.cancel(true); 
        Toast.makeText(getActivity(), "Unable to load Image", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      progressDialog.show(); 

     } 

     detail_head.setText((String) data.get("title")); 
     detail_disc.setText((String) data.get((tab==0)?"summary":"location")); 
     detail_date.setText((String) data.get("date")); 
     detail_detail.setText(Html.fromHtml((String) data.get("details"))); 
     if (tab == 0) { 
      final String url = (String) data.get("url"); 
      detail_url.setText(getResources().getString(R.string.urlMessage)); 
      detail_url.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        TextView t = (TextView) v; 
        t.setTextColor(Color.BLACK); 
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
        startActivity(browserIntent); 
       } 
      }); 
     } else { 
      View view = getView(); 
      if(view != null) { 
       TextView textView = (TextView) view.findViewById(R.id.detail_url); 
       textView.setText(""); 
      } 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    relativeLayout = (RelativeLayout) getActivity().findViewById(R.id.actionBarCustom); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

    imageView = new ImageView(getActivity()); 
    imageView.setImageResource(R.drawable.ic_action_back); 
    imageView.setLayoutParams(params); 

    imageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      android.support.v4.app.Fragment fragment = new Page4(); 
      getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.mainContent, fragment).addToBackStack(null).commit(); 
     } 

    }); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    detail_image = (ImageView) view.findViewById(R.id.detail_image); 
    if(imageBitmap != null) 
     detail_image.setImageBitmap(imageBitmap); 

    detail_head = (TextView) view.findViewById(R.id.detail_head); 
    detail_disc = (TextView) view.findViewById(R.id.detail_disc); 
    detail_date = (TextView) view.findViewById(R.id.detail_date); 
    detail_detail = (TextView) view.findViewById(R.id.detail_detail); 
    detail_url = (TextView) view.findViewById(R.id.detail_url); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    return inflater.inflate(R.layout.fragment_detail_screen, container, false); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    TextView t=(TextView)relativeLayout.findViewById(R.id.actionText); 
    t.setText("Details"); 
    relativeLayout.addView(imageView); 
    setValues(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    relativeLayout.removeView(imageView); 
} 

class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView bmImage; 
    public DownloadImageTask(ImageView bmImage) { 
     this.bmImage = bmImage; 
    } 
    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap mIcon11 = null; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      mIcon11 = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return mIcon11; 
    } 

    protected void onPostExecute(Bitmap result) { 
     imageBitmap = result; 
     bmImage.setImageBitmap(result); 
     progressDialog.hide(); 
    } 
} 
} 

Может ли кто-нибудь поразмыслить над этой проблемой или увидеть какие-либо проблемы с моим кодом выше?

Краш журналы:

10-15 16:59:35.436 6137-6538/com E/dalvikvm-heap: Out of memory on a 25137936-byte allocation. 
10-15 16:59:35.436 6137-6538/com I/dalvikvm: "AsyncTask #4" prio=5 tid=15 RUNNABLE 
10-15 16:59:35.436 6137-6538/com I/dalvikvm: | group="main" sCount=0 dsCount=0 obj=0x44106838 self=0x5fcb1a80 
10-15 16:59:35.436 6137-6538/com I/dalvikvm: | sysTid=6538 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1606718640 
10-15 16:59:35.436 6137-6538/com I/dalvikvm: | state=R schedstat=(101296084 23520127 71) utm=7 stm=2 core=1 
10-15 16:59:35.436 6137-6538/com I/dalvikvm:  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:696) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at com.DetailScreen$DownloadImageTask.doInBackground(DetailScreen.java:198) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at com.DetailScreen$DownloadImageTask.doInBackground(DetailScreen.java:188) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
10-15 16:59:35.441 6137-6538/com I/dalvikvm:  at java.lang.Thread.run(Thread.java:841) 
10-15 16:59:35.446 6137-6146/com D/AbsListView: [unregisterDoubleTapMotionListener] 
10-15 16:59:35.446 6137-6538/com D/skia: --- decoder->decode returned false 
10-15 16:59:35.446 6137-6538/com W/dalvikvm: threadid=15: thread exiting with uncaught exception (group=0x41b7c700) 
10-15 16:59:35.446 6137-6146/com I/MotionRecognitionManager: .unregisterListener :/listener count = 0->0, 
10-15 16:59:35.446 6137-6146/com D/AbsListView: unregisterIRListener() is called 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground() 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:841) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime: Caused by: java.lang.OutOfMemoryError 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:696) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at com.DetailScreen$DownloadImageTask.doInBackground(DetailScreen.java:198) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at com.DetailScreen$DownloadImageTask.doInBackground(DetailScreen.java:188) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)  
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)  
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)  
10-15 16:59:35.451 6137-6538/com E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:841)  
10-15 16:59:35.456 6137-6146/com D/AbsListView: [unregisterDoubleTapMotionListener] 
10-15 16:59:35.456 6137-6146/com I/MotionRecognitionManager: .unregisterListener :/listener count = 0->0, 
10-15 16:59:35.456 6137-6146/com D/AbsListView: unregisterIRListener() is called 
10-15 16:59:35.456 6137-6146/com D/AbsListView: [unregisterDoubleTapMotionListener] 
10-15 16:59:35.456 6137-6146/com I/MotionRecognitionManager: .unregisterListener :/listener count = 0->0, 
10-15 16:59:35.456 6137-6146/com D/AbsListView: unregisterIRListener() is called 
10-15 16:59:35.456 6137-6146/com D/AbsListView: [unregisterDoubleTapMotionListener] 
10-15 16:59:35.461 6137-6146/com I/MotionRecognitionManager: .unregisterListener :/listener count = 0->0, 
10-15 16:59:35.461 6137-6146/com D/AbsListView: unregisterIRListener() is called 
10-15 16:59:42.706 6137-6137/com I/Choreographer: Skipped 422 frames! The application may be doing too much work on its main thread. 
10-15 16:59:43.536 6137-6137/com D/AbsListView: onDetachedFromWindow 
10-15 16:59:43.566 6137-6137/com E/WindowManager: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{44128b10 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.566 6137-6137/com E/WindowManager: android.view.WindowLeaked: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{44128b10 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:452) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.app.Dialog.show(Dialog.java:287) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at com.DetailScreen.setValues(DetailScreen.java:95) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at com.DetailScreen.onResume(DetailScreen.java:179) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.support.v4.app.Fragment.performResume(Fragment.java:2005) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.os.Handler.handleCallback(Handler.java:730) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.os.Looper.loop(Looper.java:176) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at android.app.ActivityThread.main(ActivityThread.java:5419) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invoke(Method.java:525) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
10-15 16:59:43.566 6137-6137/com E/WindowManager:  at dalvik.system.NativeStart.main(Native Method) 
10-15 16:59:43.576 6137-6137/com E/WindowManager: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{441be848 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.576 6137-6137/com E/WindowManager: android.view.WindowLeaked: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{441be848 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:452) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.app.Dialog.show(Dialog.java:287) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at com.DetailScreen.setValues(DetailScreen.java:95) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at com.DetailScreen.onResume(DetailScreen.java:179) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.support.v4.app.Fragment.performResume(Fragment.java:2005) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.os.Handler.handleCallback(Handler.java:730) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.os.Looper.loop(Looper.java:176) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at android.app.ActivityThread.main(ActivityThread.java:5419) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invoke(Method.java:525) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
10-15 16:59:43.576 6137-6137/com E/WindowManager:  at dalvik.system.NativeStart.main(Native Method) 
10-15 16:59:43.586 6137-6137/com E/WindowManager: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{44252ad8 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.586 6137-6137/com E/WindowManager: android.view.WindowLeaked: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{44252ad8 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:452) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.app.Dialog.show(Dialog.java:287) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at com.DetailScreen.setValues(DetailScreen.java:95) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at com.DetailScreen.onResume(DetailScreen.java:179) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.support.v4.app.Fragment.performResume(Fragment.java:2005) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.os.Handler.handleCallback(Handler.java:730) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.os.Looper.loop(Looper.java:176) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at android.app.ActivityThread.main(ActivityThread.java:5419) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invoke(Method.java:525) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
10-15 16:59:43.586 6137-6137/com E/WindowManager:  at dalvik.system.NativeStart.main(Native Method) 
10-15 16:59:43.591 6137-6137/com E/WindowManager: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{442e5b90 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.591 6137-6137/com E/WindowManager: android.view.WindowLeaked: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{442e5b90 G.E..... R.....ID 0,0-684,192} that was originally added here 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:452) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.app.Dialog.show(Dialog.java:287) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at com.DetailScreen.setValues(DetailScreen.java:95) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at com.DetailScreen.onResume(DetailScreen.java:179) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.support.v4.app.Fragment.performResume(Fragment.java:2005) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.os.Handler.handleCallback(Handler.java:730) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.os.Looper.loop(Looper.java:176) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at android.app.ActivityThread.main(ActivityThread.java:5419) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invoke(Method.java:525) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
10-15 16:59:43.591 6137-6137/com E/WindowManager:  at dalvik.system.NativeStart.main(Native Method) 
10-15 16:59:43.596 6137-6137/com E/WindowManager: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{4437be38 V.E..... R......D 0,0-684,192} that was originally added here 
10-15 16:59:43.596 6137-6137/com E/WindowManager: android.view.WindowLeaked: Activity com.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{4437be38 V.E..... R......D 0,0-684,192} that was originally added here 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:452) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.app.Dialog.show(Dialog.java:287) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at com.DetailScreen.setValues(DetailScreen.java:95) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at com.DetailScreen.onResume(DetailScreen.java:179) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.support.v4.app.Fragment.performResume(Fragment.java:2005) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.os.Handler.handleCallback(Handler.java:730) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.os.Looper.loop(Looper.java:176) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at android.app.ActivityThread.main(ActivityThread.java:5419) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at java.lang.reflect.Method.invoke(Method.java:525) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
10-15 16:59:43.596 6137-6137/com E/WindowManager:  at dalvik.system.NativeStart.main(Native Method) 

Я знаю, что PHP/MySQL часть все работает нормально. Кажется, что эта страница на некоторых изображениях, что приложение будет разбиваться, пока вращающийся вращающийся вращающийся элемент. И единственное, что я вижу, это может быть причиной, когда фотография больше размера.

+0

Пожалуйста, вы можете опубликовать отчет LogCat –

+0

может ваш вызов показать диалог прогресса внутри асинхронной методы задачи onpostCreate? а также опубликовать трассировку стека аварий. – dex

+0

Вы решили? И можете ли вы дать ссылку на изображение? –

ответ

1

У вас ошибка памяти. Я полагаю, вы загружаете большое изображение. Я предпочитаю, чтобы вы использовали библиотеку this.Это потрясающе и прост в использовании. Эта библиотека загружает изображения и помещает в кэш устройства. Если вы хотите получить более подробную информацию о том, как пользоваться, напишите, пожалуйста, писать.

+0

согласился, похоже, что вы выделяете растровое изображение размером 25 бит, это плохо. Вам нужно будет загрузить изображение прямо на диск, а затем загрузить образ диска в память, используя BitmapFactory, чтобы уменьшить размер. – ripple182

+0

«Большой» образ, который разбивает приложение, составляет всего 420kb? Это 3000px x 2000px и 420kb. – Richard

+0

25137936 bytes = 25 mb. Проверьте свой журнал «Недостаточно памяти на выделение 25137936 байт». –

0

Похоже, что этот сбой связан с управлением памятью, как отмечали другие.

Я обнаружил, что это может быть обработано путем добавления атрибута:

android:hardwareAccelerated="true" 

как тег активности в манифестах.

Может ли кто-нибудь прокомментировать, похоже ли это, что это законный способ решить эту проблему?

0

Эта проблема возникает, когда вы загружаете изображения, и после загрузки некоторых снимков, оставшихся в вашем приложении, не было выделено ваше приложение. Есть различные изображения Загрузка библиотеки, которые облегчат вашу работу: Fresco, Picasso, Glide и т.д.

  1. Я хотел бы предложить вам оформить Image Library Management с помощью Facebook, который Fresco, что является довольно удивительным и зрелым по сравнению к другой библиотеке загрузки изображений.

  2. Фреско имеет SimpleDraweeView, как настраиваемое представление изображения, которое поддерживает Rounded Corners and Circleslink и поддерживает анимированный (.gif, .webp), а также нормальные изображения (.jpg, .png).

  3. Fresco обрабатывает все кэширование вещи изображений с 3 уровня архитектуры (BITMAP_MEMORY_CACHE, ENCODED_MEMORY_CACHE и DISK_CACHE). Это также уменьшает проблемы OOM (вне памяти).Когда изображение в представлении выходит из экрана, оно автоматически перерабатывает растровое изображение, поэтому освобождает память.

Вы можете увеличить память, выделенную для вашего приложения, добавив android:largeHeap="true" в манифест.

Примечание: Увеличение heap для вашего приложения не рассматривается как идеальное решение.

Вот выдержка из Google, что объясняет,

Однако возможность запросить большую кучу предназначена только для небольшого набора приложений, которые могут обосновать необходимость потреблять больше оперативную память (например как большое приложение для редактирования фотографий). Никогда не запрашивайте большую кучу просто , потому что у вас закончилась нехватка памяти, и вам нужно быстро исправить - вы должны использовать ее, только если вы точно знаете, где находится ваша память и почему ее необходимо сохранить. Тем не менее, даже если вы уверены, что ваше приложение может оправдать большую кучу, вы не должны запрашивать его до независимо от того, насколько это возможно. Использование дополнительной памяти будет все больше и больше в ущерб общему пользовательскому опыту, потому что сбор мусора займет больше времени, а производительность системы может быть медленнее при переключении задачи или выполнении других общих операций.

вот полная ссылка документации https://developer.android.com/training/articles/memory.html

Смежные вопросы