在我的日常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
答案 0 :(得分:0)
您需要什么Runnable
,而这View
却是它不拥有的?
您必须为内容视图添加膨胀,并且请勿触摸视图超出其所有者的范围。就像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
这是因为MainActivity
应该是View
的所有者; Runnable
甚至无法在UIThread
上运行-希望它可以理解,为什么永远无法解决。