gpt4 book ai didi

java - 当 Android Studio 遇到代理内的断点时应用程序崩溃

转载 作者:太空狗 更新时间:2023-10-29 14:38:32 26 4
gpt4 key购买 nike

在我日常的android开发中,我遇到过几次使用android studio调试时应用程序崩溃的情况。我以为是android studio的问题。今天我尝试使用 jdb 进行调试,但是当我键入“where”命令时应用程序仍然崩溃。回溯停止在调用代理之类的地方,这与往常不同。通常,回溯的顶部是 handleMessage/nativePollOnce 之类的东西。所以我开始考虑可能是由代理引起的。所以我用Proxy写了一些简单的代码来验证一下。应用程序在断点处崩溃了。有人见过这个吗?我怎样才能让应用程序不崩溃?这真的很烦人。

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
bindProxy(new Runnable() {
@Override
public void run() {
setContentView(R.layout.activity_main); // Set breakpoint here
}
}).run();
}

Runnable bindProxy(final Runnable r) {
return (Runnable)Proxy.newProxyInstance(getClassLoader(), new Class[]{Runnable.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Wrapped runnable");
r.run();
return null;
}
});
}
}

jdb 回溯:

Breakpoint hit: "thread=main", android.support.v7.app.AppCompatActivity.setContentView(), line=139 bci=0

main[1] where
[1] android.support.v7.app.AppCompatActivity.setContentView (AppCompatActivity.java:139)
[2] com.example.ally.ipc.MainActivity$1.run (MainActivity.java:32)
[3] com.example.ally.ipc.MainActivity$2.invoke (MainActivity.java:44)
[4] java.lang.reflect.Proxy.invoke (Proxy.java:913)

The application has been disconnected

最佳答案

你需要这个 Runnable 是为了什么,它正在接触一个它不拥有的 View?您必须膨胀内容 View 并且不要触摸来自其所有者范围之外的 View 。就像这样:

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

这是因为 MainActivity 应该是 View 的所有者; Runnable 甚至不在 UIThread 上运行 - 希望这能让它变得容易理解,为什么这永远不会成功。

关于java - 当 Android Studio 遇到代理内的断点时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51950809/

26 4 0
文章推荐: html - 标签如何影响表单提交