簡體   English   中英

當Android Studio遇到代理內部的斷點時,應用程序崩潰

[英]App crashes when Android Studio hits breakpoint which is inside a proxy

在我的日常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 ,它不擁有? 您必須對內容視圖進行充氣,並且不要觸及其所有者范圍之外的視圖。 就像這樣:

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

這是因為MainActivity應該是View的所有者; 一個Runnable甚至沒有在UIThread上運行 - 希望這應該讓它變得可以理解,為什么這將永遠不會成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM