Сбой приложения при переключении на новую страницу действий / приложений - PullRequest
1 голос
/ 04 августа 2011

Мое приложение вылетает, когда я использую кнопку меню, чтобы переключиться на новую страницу и вызвать новую активность.Я запрограммировал одну и ту же кнопку меню / Активность в нескольких приложениях, и у меня никогда не было проблем.

В моем приложении есть следующие классы:

  1. SplashActivity.java
  2. MainActivity.java
  3. AboutUs.Java

Я протестировал кнопку меню с повторным открытием SplashActivity, и она работала, поэтому ошибка не с кнопкой меню и вызовом функции,Я также изменил содержимое файла AboutUs.java, чтобы в нем не было ничего, кроме импорта и файла R.id.about_us, и он по-прежнему не работал, что заставляет меня думать, что на странице не было ошибок.

Моя ошибка 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)

Java меню в MainActivity, которое вызывает AboutUs.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:

<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 для активности всплеска:

пакет 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 ]

2 голосов
/ 04 августа 2011

Согласно опубликованному вами коду, вы вызываете Thread.stop(), который является устаревшим методом, и Android его не реализует.

В этом случае вам не нужно вызывать stop по адресувсе.Thread остановится, когда закончится блок кода в методе run.Удалите вызов stop, и ваше исключение исчезнет.

Если вам нужно остановить Thread в середине его выполнения, вам следует вместо этого использовать метод interrupt, чтобы позволить потокузнаю, что это должно перестать работать.Ваш код Thread должен будет вызвать метод isInterrupted, чтобы узнать, нужно ли прекратить работу.

0 голосов
/ 07 августа 2011

Я узнал свою ошибку. В манифесте Android я поместил кусок кода, идентифицирующий мою страницу AboutUs, за пределы приложений. Странно, что после нескольких дней изучения кода вы, наконец, видите одну крошечную ошибку.

Спасибо всем за помощь.

...