切换到新的活动/应用页面时,应用崩溃

时间:2011-08-04 13:20:03

标签: java android class android-activity crash

当我使用菜单按钮切换到新页面并调用新活动时,我的应用程序崩溃了。我在一些应用程序中编写了相同的菜单按钮/ Activity,但从未遇到过问题。

我的应用程序中有以下类:

  1. SplashActivity.java
  2. MainActivity.java
  3. AboutUs.Java
  4. 我已经测试了菜单按钮并重新打开了SplashActivity并且它工作正常,因此错误不在于菜单按钮并调用该功能。我还更改了AboutUs.java的内容除了导入和R.id.about_us xml之外什么都没有,但它仍然无效,这让我觉得页面中没有错误。

    我的LogCat错误:

    ERROR/AndroidRuntime(667): 
    ERROR: thread attach failed
    08-04 12:07:13.039: 
    ERROR/AndroidRuntime(675): 
    ERROR: thread attach failed
    08-04 12:07:19.119: 
    ERROR/gralloc(68): [unregister] handle 0x3ea8d8 still locked (state=40000001)
    08-04 12:07:23.489: 
    ERROR/global(685): Deprecated Thread methods are not supported.
    08-04 12:07:23.489: 
    ERROR/global(685): java.lang.UnsupportedOperationException
    08-04 12:07:23.489: 
    ERROR/global(685):     at java.lang.VMThread.stop(VMThread.java:85)
    08-04 12:07:23.489: 
    ERROR/global(685):     at java.lang.Thread.stop(Thread.java:1379)
    08-04 12:07:23.489: 
    ERROR/global(685):     at java.lang.Thread.stop(Thread.java:1344)
    08-04 12:07:23.489: 
    ERROR/global(685):     at com.peakmobiledesigns.kitchenunitconverter.SplashActivity$1.run(SplashActivity.java:28)
    

    MainActivity中调用AboutUs.java的菜单java:

    //menu starts here
    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()){
        case R.id.feedback:
            final Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("plain/text");
            intent.putExtra(Intent.EXTRA_EMAIL, new String[]"peakmobiledesigns@gmail.com"});
                    startActivity(intent);
            return true;
        case R.id.about_us:
            startActivity(new Intent("com.peakmobiledesigns.kitchenunitconverter.ABOUTUS"));
            return true;
        }
        return false;
    }
    //menu ends here
    

    这就是我在Android Manifest中为该活动列出的内容:

    <activity android:name=".AboutUs" android:screenOrientation="portrait">
       <intent-filter>
           <action android:name="com.peakmobiledesigns.kitchenunitconverter.ABOUTUS" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>
    

    以下是启动活动的Java:

    package com.peakmobiledesigns.kitchenunitconverter;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    
    public class SplashActivity extends Activity {
    protected int _splashTime = 2000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        Thread splashTread = new Thread() {
            @Override
            public void run() {
                try {
                    int waited = 0;
                    while ((waited < _splashTime)) {
                        sleep(100);
                        waited += 100;
                    }
                } catch (InterruptedException e) {
                } finally {
                    finish();
                    startActivity(new Intent(getApplicationContext(),
                            KitchenConvertor.class));
                    stop();
                }
            }
        };
        splashTread.start();
    
    }
    
    }
    

2 个答案:

答案 0 :(得分:2)

根据您发布的代码,您正在调用Thread.stop(),这是一种弃用的方法,Android并未实现它。

在这种情况下,您根本不需要拨打stop。当Thread方法中的代码块完成时,run将自行停止。移除对stop的调用,您的例外将会消失。

如果确实需要在执行过程中停止Thread,则应该使用interrupt方法让线程知道它应该停止运行。您的Thread代码需要调用isInterrupted方法来了解是否停止运行。

答案 1 :(得分:0)

我发现了我的错误。在Android Manifest上,我已经将大量代码标识为应用程序支持之外的AboutUs页面。奇怪的是,经过几天的盯着代码,你终于看到了一个小小的错误。

感谢大家的帮助。