“应用已停止”“关闭应用” android studio

时间:2019-01-16 14:50:20

标签: java android

ACTIVITY_MAIN.XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#77dd77"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/splashIcon"
        android:layout_width="97dp"
        android:layout_height="216dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:contentDescription="@string/todo"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/logo1" />
</android.support.constraint.ConstraintLayout>

MAIN_SCREEN.XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Main Screen BVOOM!"
        android:textSize="35sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

SCREENONE.JAVA

package com.example.admin.test2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class ScreenOne extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen);
    }
}

MAINACTIVITY.JAVA
package com.example.admin.test2;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new Timer().schedule(new TimerTask(){
            @Override
            public void run(){
                startActivity(new Intent(getApplicationContext(), ScreenOne.class));
            }
        }, 2000);
    }
}

Android清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.admin.test2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".ScreenOne">
        </activity>
    </application>

</manifest>

“ Logcat /运行”标签中的错误:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.admin.test2, PID: 16184
                  java.lang.RuntimeException: Canvas: trying to draw too large(144000000bytes) bitmap.
                      at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229)
                      at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:97)
                      at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:529)
                      at android.widget.ImageView.onDraw(ImageView.java:1367)
                      at android.view.View.draw(View.java:20370)
                      at android.view.View.updateDisplayListIfDirty(View.java:19315)
                      at android.view.View.draw(View.java:20093)
                      at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
                      at android.view.View.draw(View.java:20373)
                      at android.view.View.updateDisplayListIfDirty(View.java:19315)
                      at android.view.View.draw(View.java:20093)
                      at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
                      at android.view.View.updateDisplayListIfDirty(View.java:19306)
                      at android.view.View.draw(View.java:20093)
                      at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
                      at android.view.View.updateDisplayListIfDirty(View.java:19306)
                      at android.view.View.draw(View.java:20093)
                      at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
                      at android.view.View.updateDisplayListIfDirty(View.java:19306)
                      at android.view.View.draw(View.java:20093)
                      at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
                      at android.view.View.updateDisplayListIfDirty(View.java:19306)
                      at android.view.View.draw(View.java:20093)
                      at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
                      at android.view.View.draw(View.java:20373)
                      at com.android.internal.policy.DecorView.draw(DecorView.java:980)
                      at android.view.View.updateDisplayListIfDirty(View.java:19315)
                      at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:686)
                      at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:692)
                      at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:800)
                      at android.view.ViewRootImpl.draw(ViewRootImpl.java:3501)
                      at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3288)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2823)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1785)
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7822)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                      at android.view.Choreographer.doFrame(Choreographer.java:658)
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                      at android.os.Handler.handleCallback(Handler.java:789)
                      at android.os.Handler.dispatchMessage(Handler.java:98)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6944)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                      at

com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

应用程序终止。

当我构建文件并在我的手机Samsung Galaxy A3 2017中进行仿真时,该应用程序将崩溃并说“ Test2已停止”。 “关闭应用”如何处理这些,请帮忙

3 个答案:

答案 0 :(得分:1)

这显然是由于将大量位图加载到内存中引起的内存问题。

现在,这里是可以遵循的提示,可以避免Android应用程序中的内存不足异常。

  1. 始终使用活动上下文代替 Application 上下文。因为无法对应用程序上下文进行垃圾回收。并在活动结束时释放资源。 (对象的生命周期应与活动的生命周期相同。)
  2. 活动结束时。检查HEAP DUMP(Android Studio中的内存分析工具)。 如果完成活动后 HEAP DUMP 中有对象,则内存泄漏。查看您的代码,找出导致内存泄漏的原因。
  3. 始终使用inSampleSize。 现在, inSampleSize 是什么? 借助inSampleSize,您实际上是在告诉解码器不要抓取内存中的每个像素,而不要抓取子样本图像。 与原始图像相比,这将导致较少数量的像素要加载到内存中。您可以告诉解码器抓取原始图像中的第4个像素或第2个像素。 如果inSampleSize为4,则解码器将返回一个Image,该Image是原始图像中像素数的1/16。
  4. 在加载到内存之前读取位图尺寸。

    如何在将图像加载到内存之前读取位图尺寸可以帮助您避免内存不足错误?让我们学习

    使用inJustBounds = true

这是一项可以帮助您在将图像加载到内存之前获取图像尺寸的技术

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;

以上代码段将给出图像/位图,它将为位图对象返回。 但它会绝对返回该图像的宽度和高度。这是R.id.myimage.

现在您具有图片的宽度和高度,可以根据以下因素放大或缩小图片:

  • ImageView大小,将用于显示图像。 可用内存量。您可以使用ActivityManager和getMemoryClass检查可用的内存量。
  • 设备的屏幕尺寸和密度。

现在,

  1. 使用适当的位图配置

位图配置是图像的颜色空间/颜色深度。 Android中的默认位图配置为RGB_8888,每像素4个字节。

如果您使用RGB_565彩色通道,则每个像素使用2字节。相同分辨率的一半内存分配:)

  1. inBitmap属性用于回收目的

  2. 请勿创建静态Drawable对象,因为无法对其进行垃圾收集

  3. 在清单文件中请求大堆

  4. 如果要执行大量图像处理(内存密集型任务)或使用NDK(使用c,c ++进行本机开发),请使用多个进程

Source

答案 1 :(得分:0)

Bro,在SCREENONE.JAVA中,您需要两次重写相同的方法。请更正它,您的应用程序可以完美运行

答案 2 :(得分:0)

对于某些设备,您的“ logo1”可绘制对象太大,它将崩溃。将其移动到drawable-xxhdpi文件夹。