当Android Studio达到代理内部的断点时,应用崩溃

时间:2018-08-21 14:20:49

标签: java android android-studio jdb

在我的日常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

1 个答案:

答案 0 :(得分:0)

您需要什么Runnable,而这View却是它不拥有的? 您必须为内容视图添加膨胀,并且请勿触摸视图超出其所有者的范围。就像这样:

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

这是因为MainActivity应该是View的所有者; Runnable甚至无法在UIThread上运行-希望它可以理解,为什么永远无法解决。