2015-10-15 28 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 library.Its真棒,易於使用。 此庫下載圖像並放入設備的緩存中。如果您想了解更多詳細信息,請隨時編寫。

+0

同意,看起來你在內存中分配一個25MB的位圖,這是不好的。您需要將映像直接下載到磁盤,然後使用BitmapFactory將磁盤映像加載到內存中以縮小大小。 – ripple182

+0

崩潰應用程序的「大」圖像只有420kb大小?它是3000px x 2000px和420kb。 – Richard

+0

25137936字節= 25 mb。 檢查您的日誌 「25137936字節分配內存不足」。 –

0

看起來,這次崩潰與內存管理相關,正如其他人所指出的那樣。

我發現,這可以通過添加屬性來處理:

android:hardwareAccelerated="true" 

爲體現活動的標籤。

任何人都可以評論這是否似乎這是一個合法的方式來解決這個崩潰的問題?

0

當您下載圖像時,出現此問題,下載某些圖像後沒有剩餘內存分配給您的應用程序。有各種不同的圖像加載庫,使您的工作更容易:FrescoPicassoGlide

  1. 相比,我建議你通過Facebook的是Fresco是相當真棒和成熟結賬圖像管理庫到其他圖像加載庫。

  2. 壁畫具有SimpleDraweeView作爲支持Rounded Corners and Circleslink並支持動畫自定義圖像視圖(.GIF,.WEBP)以及正常圖像(.JPG,.PNG)。

  3. 壁畫處理3層架構(BITMAP_MEMORY_CACHE,ENCODED_MEMORY_CACHEDISK_CACHE)緩存圖像的所有內容。它也減少了OOM(內存不足)問題。當視圖中的圖像超出屏幕時,它會自動回收位圖,從而釋放內存。

您可以通過在清單中添加android:largeHeap="true"來增加分配給應用程序的內存。

注意:增加heap爲您的應用程序不認爲是一個理想的解決方案。

下面是來自谷歌的提取物來解釋它,

然而,要求一大堆的能力僅用於一 小集合的應用程序,可以證明需要消耗更多的RAM(例如 作爲一個大型照片編輯應用程序)。千萬不要簡單地請求大堆,因爲內存不足,需要快速修復 - 只有當您確切知道分配了所有內存的位置以及必須保留的原因時,您才應該使用 。但是,即使您對自己的應用程序有足夠的信心,也可以在任何可能的範圍內儘可能避免向 發送請求。使用額外的內存將越來越多地損害整體用戶體驗,因爲垃圾收集將花費更長的時間,並且當任務切換或執行其他常見操作時,系統性能可能會更慢。

這裏的文檔https://developer.android.com/training/articles/memory.html