相关疑难解决方法(0)

Android应用程序内存不足问题 - 尝试了一切但仍然不知所措

我花了整整4天时间尽我所能来弄清楚我正在开发的应用程序中的内存泄漏,但事情很久以前就停止了.

我正在开发的应用程序具有社交性,因此请考虑配置文件活动(P)并列出包含数据的活动 - 例如徽章(B).您可以从配置文件跳转到徽章列表,转到其他配置文件,其他列表等.

所以想象一下这样的流程P1 - > B1 - > P2 - > B2 - > P3 - > B3等.为了保持一致性,我正在加载同一个用户的配置文件和徽章,所以每个P页面是相同的,所以是每个B页面.

这个问题的一般要点是:在导航了一下之后,根据每个页面的大小,我在随机位置得到了一个内存不足的例外 - 位图,字符串等 - 它似乎并不一致.

在做了一切可以想象的事情来弄清楚为什么我的内存不足之后,我什么也没想出来.我不明白的是,如果Android在加载时耗尽内存而不是崩溃,那么为什么Android不会杀死P1,B1等.如果我通过onCreate()和onRestoreInstanceState()返回它们,我会期望这些早期活动会死亡并复活.

更别说这个 - 即使我做P1 - > B1 - >返回 - > B1 - >返回 - > B1,我仍然会崩溃.这表明某种内存泄漏,即使在转储hprof并使用MAT和JProfiler后,我也无法查明它.

我已禁用从Web加载图像(并增加了加载的测试数据以弥补它并使测试公平)并确保图像缓存使用SoftReferences.Android实际上试图释放它所拥有的一些SoftReferences,但就在它崩溃内存之前.

徽章页面从Web获取数据,从BaseAdapter将其加载到EntityData数组中并将其提供给ListView(我实际上使用的是CommonsWare的优秀MergeAdapter,但在此Badge活动中,实际上只有1个适配器,但我无论哪种方式都想提到这个事实).

我已经完成了代码并且无法找到任何可能泄漏的内容.我清除并取消了我能找到的所有内容,甚至是System.gc()左右,但应用程序崩溃了.

我仍然不明白为什么堆栈上的非活动活动不会被收获,我真的很想知道这一点.

在这一点上,我正在寻找任何提示,建议,解决方案......任何有用的东西.

谢谢.

lifecycle android out-of-memory android-activity

87
推荐指数
3
解决办法
4万
查看次数

如何模拟杀戮活动以节省内存?

Android医生说:

"当系统而不是用户关闭活动以节省内存时......"

但是如何模拟这种情况?我想调试onRestoreInstanceState(Bundle)方法,但不知道如何.

android activity-lifecycle onrestoreinstancestate

34
推荐指数
4
解决办法
1万
查看次数

java.lang.IllegalStateException:使用YouTubePlayerApi时,YouTubeServiceEntity未初始化错误

我在我的应用中使用了YouTubePlayerAPIYouTubePlayerSupportFragment,但是我收到了以下错误,但我找不到导致它的原因.我一直在寻找信息,但我没有找到任何有用的东西.

java.lang.IllegalStateException: YouTubeServiceEntity not initialized
    at android.os.Parcel.readException(Parcel.java:1433)
    at android.os.Parcel.readException(Parcel.java:1379)
    at com.google.android.youtube.player.internal.l$a$a.a(Unknown Source)
    at com.google.android.youtube.player.internal.o.a(Unknown Source)
    at com.google.android.youtube.player.internal.ad.a(Unknown Source)
    at com.google.android.youtube.player.YouTubePlayerView.a(Unknown Source)
    at com.google.android.youtube.player.YouTubePlayerView$1.a(Unknown Source)
    at com.google.android.youtube.player.internal.r.g(Unknown Source)
    at com.google.android.youtube.player.internal.r$c.a(Unknown Source)
    at com.google.android.youtube.player.internal.r$b.a(Unknown Source)
    at com.google.android.youtube.player.internal.r$a.handleMessage(Unknown Source)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

在stackstrace中,没有任何行号指向我的任何类或活动.

有什么想法吗?

谢谢!

编辑

我的自定义YoutubePlayerFragment类:YouTubeVideoPlayerFragment.java

public class YouTubeVideoPlayerFragment extends YouTubePlayerSupportFragment {


private static final String ARG_URL = "url";


// …
Run Code Online (Sandbox Code Playgroud)

android youtube-api

34
推荐指数
1
解决办法
5877
查看次数

如何在ICS中启用"不要保持活动"?

如何通过代码在ics中启用"不要保持活动"选项.如果已启用,则如何阻止该活动.

注意:我在我的应用程序中使用了更多活动.因为我将一个活动移动到另一个活动,所以第一个活动被销毁.我可以将我的数据保存在onSaveInstanceState上.没有使用保存的实例状态有任何方法可以做...

提前致谢..

android android-4.0-ice-cream-sandwich

13
推荐指数
5
解决办法
1万
查看次数

NFC 服务在一段时间后失效的可能原因是什么?

我们使用 NFC 标签作为进出的停车票。在每个入口处,标签上都会写入一些数据,而在出口处,该数据会验证车辆的出口。

\n\n

部分车辆进出后,NfcService失效,智能手机无法检测到NFC标签。设备需要重新启动才能重新启动 NfcService,然后设备再次开始正常工作。

\n\n

此错误是随机出现的,我们无法在开发环境中重现此错误,但我们在停车场出入口安装的设备上多次观察到此问题。

\n\n

\n\n

当我们调试这个问题时,我们能够以某种方式管理上述日志。

\n\n

我们尝试了不同的更改,例如使用enableReaderMode而不是enableForegroundDispatch,但问题仍然存在。

\n\n
public void enableReaderMode() {\n    try {\n    Log.d("WTF", "Enabling reader mode");\n    NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);\n\n    if (nfc != null) {\n        int flags = NfcAdapter.FLAG_READER_NFC_A ;\n\n            nfc.enableReaderMode(this, new NfcAdapter.ReaderCallback() {\n                @Override\n                public void onTagDiscovered(Tag tag) {\n                    runOnUiThread(new Runnable() {\n                        @Override\n                        public void run() {\n                            Log.d("WTF", "Tag discovered");\n                            String uid = ByteArrayToHexString(tag.getId());\n                            Toast.makeText(MainActivity.this, getString(R.string.message_tag_detected), Toast.LENGTH_SHORT).show();\n                            Ndef ndef = Ndef.get(tag);\n\n                            if (isNFCDialogDisplayed) {\n\n                                if (isWrite) {\n\n …
Run Code Online (Sandbox Code Playgroud)

android nfc android-service ndef deadobjectexception

6
推荐指数
1
解决办法
3890
查看次数

Android Lollipop在完成后调用onCreate()

这是Android Lollipop 5.0的一个奇怪的行为.我有两个活动,A和B. A启动活动B.当我点击后退按钮时,在活动B中,Android在A上调用onCreate方法.此行为仅在Lollipop 5.0中可观察到.在其他版本中,onCreate在完成另一个活动后从未被调用.

问题是什么?

这是我的清单:

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

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="21" />

<application
    android:name=".Application"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppThemeMaterial" >
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity
        android:name=".activities.ActivityA"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <activity
        android:name=".activities.ActivityB"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/activityB" >
    </activity>
</application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-activity android-5.0-lollipop

3
推荐指数
1
解决办法
2488
查看次数

Android 无法从电子邮件意图中恢复

因此,在我的应用程序中,我有一个打开 Gmail 的按钮,以便用户可以检查验证码。

我用这个代码打开gmail:

val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_APP_EMAIL)
try {
    activity?.startActivity(intent)
} catch (e: Exception) {
    activity?.let {
        AlertDialog.Builder(it)
            .setTitle("Email App Not Found")
            .show()
    }
}
Run Code Online (Sandbox Code Playgroud)

启动 Gmail 效果很好,但我需要的是后退按钮返回我的应用程序。

目前,当我点击 gmail 的后退按钮时,它将最小化我的应用程序,然后重新打开我的应用程序只会重新打开 gmail,无法在不完全关闭并重新打开它的情况下返回到我的应用程序。

有没有办法覆盖后退按钮以从 Gmail 返回我的应用程序?

android kotlin

3
推荐指数
1
解决办法
1165
查看次数