简体   繁体   English

打开Intent导致应用Android Studio崩溃

[英]Opening Intent crashing the app Android Studio

I'm getting an error when opening a new intent. 打开新的意图时出现错误。 Basicly, what I'm doing is using Instagram API. 基本上,我正在使用Instagram API。 When the user logs in with their account, their token gets saved, so when they launch the app again, they don't need to login twice. 当用户使用其帐户登录时,其令牌将被保存,因此当他们再次启动该应用程序时,他们无需登录两次。 There is a part where there is an 'if' statement where it checks if there is a token or not. 在某部分中有一个“ if”语句,它在其中检查是否有令牌。 I wanted to, when there is a token, it launched automatically to Home Acitivty (since this is the Login Activity). 我想在有令牌时自动将其启动到Home Acitivty(因为这是“登录活动”)。 But when I do this following code: 但是当我执行以下代码时:

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

    // Declarar os objetos


    tv_name = (TextView) findViewById(R.id.username);
    pro_pic = (ImageView) findViewById(R.id.pro_pic);
    TextView txtTituloLogin = (TextView) findViewById(R.id.txtTitleLogin);
    TextView txtDescLogin = (TextView) findViewById(R.id.txtDescLogin);
    Button btnLogin = (Button) findViewById(R.id.btnInstagramLogIn);




    // Check already if have access token
    prefs = getSharedPreferences(Constants.PREF_NAME, MODE_PRIVATE);
    token = prefs.getString("token",null);
    if(token!= null)
    {
        finish();
        Intent intentHome = new Intent(LoginActivity.this, HomeActivity.class);
        startActivity(intentHome);

    }

And when I run the app, it just crashes. 当我运行该应用程序时,它崩溃了。

My Logcat: 我的Logcat:

  Process: com.gmail.andre00nogueira.feelproject, PID: 9195 java.lang.OutOfMemoryError: Failed to allocate a 79191852 byte 

allocation with 4194304 free bytes and 47MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) at android.content.res.Resources.getDrawable(Resources.java:771) at android.content.Context.getDrawable(Context.java:525) at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:351) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:200) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:188) at android.support.v7.co 分配4194304个空闲字节并分配47MB的空间,直到dalvik.system.VMRuntime.newNonMovableArray(Native Method)的OOM处android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)的android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) android的.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)在android.contents.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)在android。 content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)在android.content.res.Resources.getDrawable(Resources.java:771)在android.content.Context.getDrawable(Context.java:525)在android.support android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:200)上的.v4.content.ContextCompat.getDrawable(ContextCompat.java:351)android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java :188)位于android.support.v7.co ntent.res.AppCompatResources.getDrawable(AppCompatResources.java:100) at android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:58) at android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:78) at android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:68) at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1024) at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1081) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(Lay ntent.res.AppCompatResources.getDrawable(AppCompatResources.java:100)在android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:58)在android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:78 )在android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:68)在android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106)在android.support.v7.app.AppCompatDelegateImplV9.createView (AppCompatDelegateImplV9.java:1024)在android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1081)在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)在android.view.LayoutInflater.createViewFrom android.view.LayoutInflater.rInflate(LayoutInflater.java:858)的LayoutInflater.java:727)android.view.LayoutInflater.inflate(LayoutInflater.java:518)的android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)的LayoutInflater.java:518) )android.view.LayoutInflater.inflate(Lay outInflater.java:426) at android.view.LayoutInflater.inflate(LayoutInflater.java:377) at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) at com.gmail.andre00nogueira.feelproject.HomeActivity.onCreate(HomeActivity.java:16) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.and android.view.LayoutInflater.inflate(LayoutInflater.java:377)处的outInflater.java:426)android.support.v7.app.AppCompatActivity处的android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) com.gmail.andre00nogueira.feelproject.HomeActivity.onCreate(HomeActivity.java:16)上的.setContentView(AppCompatActivity.java:139)在android.app.Instrumentation上的android.app.Activity.performCreate(Activity.java:6679)上。 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)上的callActivityOnCreate(Instrumentation.java:1118)android.app.ActivityThread.-wrap12(ActivityThread。)上的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)上的callActivityOnCreate(Instrumentation.java:1118) android.os.Looper.loop(Looper.java:154)处android.os.Handler.dispatchMessage(Handler.java:102)处android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)处的Java) com.and处java.lang.reflect.Method.invoke(Native Method)处的android.app.ActivityThread.main(ActivityThread.java:6119) roid.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) oid.roid.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Try to open the Activity before destroy the current Activity: 在销毁当前活动之前尝试打开活动:

...
  if(token!= null)
    {
        //finish();
        Intent intentHome = new Intent(LoginActivity.this, HomeActivity.class);
        startActivity(intentHome);

        finish();

    }
...

Update: Your real problem is the memory: 更新:您真正的问题是内存:

java.lang.OutOfMemoryError: Failed to allocate a 79191852 byte allocation with 4194304 free bytes and 47MB java.lang.OutOfMemoryError:未能分配79191852字节分配以及4194304可用字节和47MB的空间

Into the HomeActivity class, you are trying to load an image (or images) with a bigger size, and this would be a problem to handle in the memory. 在HomeActivity类中,您试图加载更大的图像,这在内存中将是一个问题。

HomeActivity.onCreate(HomeActivity.java:16) at android.app.Activity.performCreate(Activity.java:6679) android.app.Activity.performCreate(Activity.java:6679)上的HomeActivity.onCreate(HomeActivity.java:16)

You need to optimize your images or try to load smaller version of the images. 您需要优化图像或尝试加载较小版本的图像。

Based on your stack trace, you are trying to load a HUGE image in your HomeActivity. 根据您的堆栈跟踪,您试图在HomeActivity中加载一个巨大的图像。 Using a smaller image resource should solve that particular crash. 使用较小的图像资源应该可以解决该特定崩溃问题。

Your problem is the memory 你的问题是记忆

OutOfMemoryError is the most common problem occured in android while especially dealing with bitmaps. OutOfMemoryError是android中最常见的问题,尤其是在处理位图时。 This error is thrown by the Java Virtual Machine (JVM) when an object cannot be allocated due to lack of memory space and also, the garbage collector cannot free some space. 当由于内存不足而无法分配对象时,Java虚拟机(JVM)会引发此错误,并且垃圾回收器无法释放一些空间。

You need to add android:largeHeap="true" on your Manifast.xml file 您需要在Manifast.xml文件中添加android:largeHeap =“ true”

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">

Memory leaks in Android are actually quite easy to make, which is probably part of the problem. 实际上,Android中的内存泄漏很容易造成,这可能是问题的一部分。 The biggest issue is the Android Context object. 最大的问题是Android Context对象。

Every app has a global application context ( getApplicationContext()). 每个应用程序都有一个全局应用程序上下文(getApplicationContext())。 Every activity is a subclass of Context , which stores information related to the current activity. 每个活动都是Context的子类,它存储与当前活动有关的信息。 More often than not, your memory leak will be associated with a leaked activity. 通常,您的内存泄漏将与活动泄漏相关联。

This is some information about Memory leak, 这是有关内存泄漏的一些信息,

How do I avoid memory leaks? 如何避免内存泄漏?

  • Avoid passing Context objects further that your activity or fragment 避免将Context对象传递到活动或片段附近
  • NEVER make/store a Context or View in a static variable. 切勿在静态变量中创建/存储上下文或视图。 This is the first sign of a memory leak. 这是内存泄漏的第一个迹象。

    private static TextView textView; 私有静态TextView textView; //DO NOT DO THIS //不要这样做

    private static Context context; 私有静态上下文上下文; //DO NOT DO THIS //不要这样做

  • Always unregister listeners in your onPause()/ onDestroy() methods. 始终在onPause()/ onDestroy()方法中取消注册侦听器。 This includes Android listeners, to things such as Location services or display manager services and your own custom listeners. 这包括Android侦听器,位置服务或显示管理器服务之类的内容以及您自己的自定义侦听器。

  • Don't store strong references to activities in your AsyncTasks or background threads. 不要在AsyncTasks或后台线程中存储对活动的强引用。 Your activity may get closed, but your AsyncTask will continue execution and hold onto that reference of your activity. 您的活动可能会关闭,但是您的AsyncTask将继续执行并保留该活动的引用。

  • Use Context-application (getApplicationContext()) instead of Context from an activity if you can. 如果可以,请使用上下文应用程序(getApplicationContext())代替活动中的上下文。
  • Try not to use non-static inner classes if you can avoid it. 如果可以避免,请尽量不要使用非静态内部类。 Storing reference to something like an Activity or View inside this can lead to memory leaks. 在其中存储对诸如“活动”或“视图”之类的引用可能会导致内存泄漏。 Use WeakReference if you need to store reference to them. 如果需要存储对它们的引用,请使用WeakReference。

your can get more info on this site 您可以在此网站上获得更多信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM