小编gsc*_*tti的帖子

应用程序代码外的 Android RuntimeException

我遇到了一个奇怪的问题,它只出现在特定设备上(或者至少在我测试我的应用程序的大约 10 个其他设备中不存在)。

有时,当应用程序应该显示一个进度对话框,然后显示一个包含消息的 Toast 时,它反而崩溃了;在 Play Console 上看,我看到了这个堆栈跟踪:

java.lang.RuntimeException: 
  at android.view.InputChannel.nativeReadFromParcel (Native Method)
  at android.view.InputChannel.readFromParcel (InputChannel.java:148)
  at android.view.IWindowSession$Stub$Proxy.addToDisplay (IWindowSession.java:796)
  at android.view.ViewRootImpl.setView (ViewRootImpl.java:750)
  at android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:298)
  at android.view.WindowManagerImpl.addView (WindowManagerImpl.java:91)
  at android.widget.Toast$TN.handleShow (Toast.java:732)
  at android.widget.Toast$TN$1.run (Toast.java:631)
  at android.os.Handler.handleCallback (Handler.java:739)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:145)
  at android.app.ActivityThread.main (ActivityThread.java:6939)
  at java.lang.reflect.Method.invoke (Native Method)
  at java.lang.reflect.Method.invoke (Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1404)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1199)
Run Code Online (Sandbox Code Playgroud)

进度条和 Toast 应该每 5 秒显示一次。

如您所见,一切都发生在 Android 内部(没有参考我的实际代码),但我相信以下是所涉及的代码片段。

这是显示进度条的地方:

public abstract class FragmentNetworkingBenderAsyncTask<I, O> extends BenderAsyncTask<I, O> {

    @SuppressLint("StaticFieldLeak")
    private …
Run Code Online (Sandbox Code Playgroud)

java android

7
推荐指数
1
解决办法
153
查看次数

从 `onCreateView` 调用 `getActivity()` 是否安全?

查看 Fragment 生命周期(例如此处),Activity 似乎在发出任何其他回调之前附加到 Fragment(这是由onAttach()方法通知的)。

在我的由单个活动组成的应用程序中,第一个 Fragment 是从onCreate()Activity的方法中打开的(实际上它是在里面完成的最后一件事onCreate())。

目前,我正在onCreateView()回调中初始化我的所有图形元素,包括一些ArrayAdapter需要构造 Activity 的对象(如)的实例化,这是通过调用getActivity(). 我假设此时 Activity 肯定存在,因为该onAttach()方法已经被调用。
我注意到 IntelliJ 警告我getActivity()返回的可能性null,可能只是因为该方法被注释为@Nullable,所以我开始在网上搜索我的假设是否真的正确,现在我很困惑:getActivity()在内部调用是否真的安全onCreateView()? 为什么有一个方法被调用onActivityCreated()(我知道它现在已被弃用,但它肯定是有用途的)?

不幸的是,文档无助于理解这一点。

android fragment android-activity

0
推荐指数
1
解决办法
297
查看次数

标签 统计

android ×2

android-activity ×1

fragment ×1

java ×1