小编Har*_*ngh的帖子

android.os.MessageQueue.nativePollOnce 处的 ANR

我们在应用程序的不同部分看到了此 ANR。想了解导致此 ANR 的原因吗?

main (native): tid=1 systid=31940
#00 pc 0x5431c libc.so 
#01 pc 0x1313a5 libart.so 
#02 pc 0x2ab05b libart.so 
#03 pc 0x3659 libnativehelper.so 
#04 pc 0x9dee9 libandroid_runtime.so 
#05 pc 0x65c45 libgui.so 
#06 pc 0x11dcd libutils.so 
#07 pc 0x11abf libutils.so 
#08 pc 0xbcc7d libandroid_runtime.so 
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:339)
       at android.os.Looper.loop(Looper.java:199)
       at android.app.ActivityThread.main(ActivityThread.java:8276)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
Run Code Online (Sandbox Code Playgroud)

这是 firebase 对于此 ANR 的说法 -

ANR 发生时该线程处于空闲状态。我们没有足够的信息来确定根本原因。

performance android android-anr-dialog firebase android-looper

102
推荐指数
2
解决办法
5万
查看次数

如何在Crashlytics(Fabrics)中有效地将非致命异常分组?

我们正在应用中使用Crashlytics作为崩溃报告工具。对于Android本机崩溃,它可以正常工作并正确地对崩溃进行分组。我们的应用程序在react-native中也很少有组件。对于这些组件中发生的崩溃,我们将其捕获,然后将它们作为非致命异常记录到Crashlytics中。

public class PlatformNativeModuleCallExceptionhandler implements 
NativeModuleCallExceptionHandler {
@Override
public void handleException(Exception e) {
    try {
        .
        .
        .
        Crashlytics.logException(new Exception(exceptionString));
    } catch (Exception ex) {}
}
Run Code Online (Sandbox Code Playgroud)

崩溃记录在Crashlytics仪表板中,但它在单个选项卡中显示了所有崩溃。这些可能是相同或不同的本机组件的不同崩溃。

在此处输入图片说明

因此,我们无法找出特定崩溃的实例。需要手动处理每个崩溃实例。

我猜它取了创建异常的类的名称,在这种情况下为PlatformNativeModuleCallExceptionHandler。我尝试创建自己的自定义异常类,但这也无济于事。

有人知道我们如何在这里更好地将非致命异常分组吗?所有类似的崩溃应与它们的总实例一起分组。

android crashlytics twitter-fabric react-native crashlytics-android

8
推荐指数
1
解决办法
1287
查看次数

谷歌计费服务在几秒钟内自动断开多次

我正在使用 Google 的应用内结算。(版本 2.2.0)

我在应用程序类中使用以下代码开始计费连接:

billingClient = BillingClient.newBuilder(Application.getInstance()).setListener(this).enablePendingPurchases().build()
billingClient.startConnection(this)
Run Code Online (Sandbox Code Playgroud)

使用上述代码成功连接计费服务。

但我观察到市场上的一个问题,即 onBillingServiceDisconnected()在几秒钟内被多次调用。根据我们的内部分析,大约 13% 的用户在 5 秒内收到了 2 个或更多 onBillingServiceDisconnected() 调用。正如谷歌文档所建议的那样,我尝试使用billingClient.startConnection(this)重新连接 onBillingServiceDisconnected() 内的服务 ,之后服务再次连接,但又断开连接。

如此多的用户如此频繁的服务中断背后的原因可能是什么?

它也会导致付款问题吗?

payment android in-app-purchase in-app-billing android-inapp-purchase

8
推荐指数
0
解决办法
925
查看次数

如何防止Monkey测试打开通知面板并关闭wifi?

我在我的Android应用程序上执行Monkey测试.在执行事件时,Monkey会关闭通知面板并单击wifi /移动数据图标,从而将其关闭.

我正在使用此命令:adb shell monkey -p package_name --throttle 100 -s 999 -v 50000

我已经尝试了这里给出的所有选项:https://developer.android.com/studio/test/monkey.html

有没有办法阻止Monkey测试打开通知面板?

android automated-tests monkey-testing monkey

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

如何在三星、OnePlus 等游戏启动器应用程序中将非 Playstore Android 应用程序检测为“游戏”

我有一台三星 S21 (OS 12) 设备,带有三星的“游戏启动器”应用程序。从各自网站下载的非 Playstore 应用程序(例如 Winzo、Zupee 等)一旦安装,就会自动显示在游戏启动器应用程序中。但是,我的应用程序不会自动显示。此外,当我尝试将应用程序添加到游戏启动器时,它会显示“ <app_name> 不是游戏。某些服务将无法使用”。因此,当我的应用程序运行时,游戏模式设置不会显示。

我已经尝试过以下方法:

  • 在 androidmanifest 的 application 标签中添加android:isGame="true"
  • 在 androidmanifest 的 application 标签中添加android:appCategory="game"
  • 在 androidmanifest 的 application 标签中添加android:hardwareAccelerated="true"
  • 将OpenGL添加到应用程序<uses-feature android:glEsVersion="0x00020000" android:required="true" />
  • 尝试使用应用程序 ID 名称,例如保留 com.example.myapplication

以上均无效。OnePlus 中的“游戏”应用程序也是如此。我已经检查了 StackO 上的所有现有资源。

如何让这些应用程序将我的应用程序检测为游戏?

android android-manifest samsung-mobile kotlin samsung-galaxy

5
推荐指数
0
解决办法
500
查看次数