设置断点时,Android活动崩溃

时间:2015-06-22 23:27:23

标签: android android-studio adb oneplusone

我在开发适用于Android的应用时遇到了一个奇怪的问题。我尝试使用手机(Oneplus One),Android Studio和ADB调试我的应用程序。一切正常,除了当我启动一个已经在Android Studio中设置了断点的活动时,它会崩溃,没有日志输出。当活动是启动活动时以及我以意图启动活动时都会发生这种情况。

你可以想象,这是令人难以置信的恼人,因为我的onCreate()方法中有一个我想要破解的错误。

我尝试将行Debug.waitForDebugger()添加到断点上方的代码位,但这并没有帮助。

我还没有为此问题添加任何代码,因为此错误与代码无关。它发生在多个项目和活动中。我没有其他Android手机可以对其进行测试,因此无法检查。有没有其他人经历过这个和/或找到了解决办法?

提前致谢。

编辑: 添加了代码示例。当没有设置断点时,此代码不会崩溃,断点也不需要在这段代码中发生崩溃。这只是我尝试调试的代码,如果不了解我的服务器后端,就无法修复其行为,因此我并没有寻求帮助。

protected void onCreate(Bundle savedInstanceState) {
    //Create activity
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Check for play services
    if (!checkPlayServices()){
        //Exit and notify user that play services are required
        Toast.makeText(this, "Google Play Services must be installed for Insty to work", Toast.LENGTH_LONG).show();
        System.exit(1);
        }

    //Get token. If null, push to login screen
    SharedPreferences sp = getBaseContext().getSharedPreferences(NetService.SP_APP, Context.MODE_PRIVATE);
    if (!sp.contains(NetService.SP_TOKEN)){
        //Token doesn't exist - push to login screen
        startActivity(new Intent(MainActivity.this, LoginActivity.class));
        MainActivity.this.finish();
        return;
    }

    //Setup action bar
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);

    //Populate navigation drawer
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)findViewById(R.id.left_drawer);
    String[] menuItems = getResources().getStringArray(R.array.menu_items);
    mDrawerList.setAdapter(new ArrayAdapter<>(this, R.layout.drawer_list_item, menuItems));
    //Set an on click listener
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    //Add to action bar
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open_drawer, R.string.close_drawer){
        @Override
        public void onDrawerClosed(View view){
            invalidateOptionsMenu();
        }

        @Override
        public void onDrawerOpened(View view){
            invalidateOptionsMenu();
        }
    };

    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mDrawerToggle.syncState();
        }
    });

    //Start a token verification
    ResultReceiver receiver = new ResultReceiver(new Handler()){
        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            VerifyResult result = VerifyResult.values()[resultData.getInt(NetService.RESULT_VERIFY)];
            switch (result){
                case VALID:
                    //Do nothing
                    break;

                case INVALID:
                    //Push back to login screen
                    startActivity(new Intent(MainActivity.this, LoginActivity.class));
                    MainActivity.this.finish();
                    break;

                case BAD_NETWORK:
                    //Toast to let user know network is down
                    Toast.makeText(MainActivity.this, R.string.bad_network, Toast.LENGTH_LONG).show();
                    break;

                case ERROR:
                    //Toast to show error
                    Toast.makeText(MainActivity.this, R.string.generic_error, Toast.LENGTH_LONG).show();
                    break;
            }
        }
    };
    //Start verify
    NetService.startActionVerify(this, receiver, sp.getString(NetService.SP_TOKEN, ""));

    //Open on chats fragment
    FragmentManager fragMgr = getFragmentManager();
    fragMgr.beginTransaction().replace(R.id.content_frame, new ChatsFragment()).commit();

}

1 个答案:

答案 0 :(得分:0)

Android Studio的最新版本(1.1-1.2)有一些调试错误可能导致新的内联调试功能。 There是一个问题主题,也是一个解决方案。试一试,它解决了我的调试问题。