首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android页面在图像下载期间崩溃

Android页面在图像下载期间崩溃
EN

Stack Overflow用户
提问于 2015-10-15 15:48:39
回答 3查看 94关注 0票数 0

我是一个极端的Android / Java新手,正在开发我的第一个android应用程序。

我有一个从php/mySQL页面下载数据并在屏幕布局上显示数据的页面。数据将包含某些字段:标题、摘要、照片等。“照片”字段是存储在网上的图像的URL。

当照片链接字段为空时,页面似乎正常工作。当图像是一个很小的图像时,页面似乎工作得很好。但是当图像文件更大时,应用程序就会崩溃。

本页的完整代码如下所示,因为我不知道这段代码的问题在哪里!

代码语言:javascript
运行
复制
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();
    }
}
}

有人能对这个问题有任何想法,或者看到上面我的代码有什么问题吗?

坠机日志:

代码语言:javascript
运行
复制
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部分都正常工作。在一些图片上,这个应用程序会在加载旋转器旋转时崩溃。我唯一能看到的原因可能是照片的尺寸更大。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-15 16:13:57

你有一个内存不足的错误,我想你正在下载一个大的图像。我更希望你使用 library.Its,既棒又容易使用。这个库下载图片并放入您想要的device.If的缓存中,详细说明如何使用,请随意编写。

票数 1
EN

Stack Overflow用户

发布于 2015-10-17 12:11:42

正如其他人所指出的,这次崩溃似乎与内存管理有关。

我发现可以通过添加一个属性来处理这个问题:

代码语言:javascript
运行
复制
android:hardwareAccelerated="true"

作为清单中的活动标记。

有谁能评论一下,这是否是解决这一问题的合法途径?

票数 0
EN

Stack Overflow用户

发布于 2015-10-17 12:35:31

当您下载图片时会出现这个问题,并且在下载了一些图像之后,没有剩余的内存分配给您的应用程序。有各种各样的图像加载库,使您的工作更容易:壁画毕加索滑行等。

  1. 我建议您通过Facebook查看图像管理库,这是相对于其他图像加载库来说非常棒和成熟的壁画
  2. 壁画有SimpleDraweeView作为自定义图像视图,它支持Rounded Corners and Circles 链接,支持动画(.gif,.webp)以及普通图像(.jpg,.png)。
  3. Fresco用3层架构( BITMAP_MEMORY_CACHEENCODED_MEMORY_CACHEDISK_CACHE)处理图像的所有缓存。它还减少了OOM(内存不足)问题。当视图中的图像超出屏幕时,它会自动回收位图,从而释放内存。

可以通过在清单中添加android:largeHeap="true"来增加分配给应用程序的内存。

注意:为您的应用程序增加heap并不是理想的解决方案。

这是谷歌的摘录,

然而,请求一个大堆的能力只适用于一小部分应用程序,这些应用程序可以证明需要消耗更多的RAM (如大型照片编辑应用程序)。千万不要仅仅因为内存用完而请求大堆,并且需要快速修复--只有当您确切地知道分配内存的位置和必须保留内存的原因时,才应该使用它。然而,即使你确信你的应用程序可以证明你的大堆是正确的,你也应该避免在任何可能的程度上请求它。使用额外的内存将越来越不利于整个用户体验,因为当任务切换或执行其他常见操作时,垃圾收集将花费更长的时间,而系统性能可能会更慢。

以下是文档https://developer.android.com/training/articles/memory.html的完整链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33153008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档