2011-07-15 31 views
0

我在Android中有一个活动,它显示为一个图片的背景。当我点击背景时,我使用intent去参加另一个活动.... 这是我的代码的外观像:在Android中启动线程的问题

​​

我用我在onResume()启动一个线程...这个线程循环,直到布尔variabile的_active设置为false .The变量设置为false,当我点击模拟器的屏幕上:

public boolean onTouchEvent(MotionEvent event){ 
      if(event.getAction()==MotionEvent.ACTION_DOWN){ 

       _active=false; 
       } 
      return true; 
     } 

,然后我传递到下一个活动使用意图:

Intent i = new Intent(getBaseContext(), com.SplashScreen.ConnectWithFb.class); 

线程中被启动onResume()onPause() .The停止想法是,当我回来这个活动我想同样的想法工作....当我点击屏幕时传递给下一个活动!

这里是我的logcat的样子:

Uncaught handler: thread main exiting due to uncaught exception 
java.lang.RuntimeException: Unable to resume activity {com.SplashScreen/com.SplashScreen.Precisari}: java.lang.IllegalThreadStateException: Thread already started. 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1889) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4363) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.IllegalThreadStateException: Thread already started.    at java.lang.Thread.start(Thread.java:1322) 
    at com.SplashScreen.Precisari.onResume(Precisari.java:101) 
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149) 
    at android.app.Activity.performResume(Activity.java:3763) 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937) 

能请人告诉我,我在做什么错?

+0

什么?我不明白! – adrian

回答

-2

在try catch块中放入sleep(100)。

+0

它说我的线程已经启动,这与事实有什么关系? – adrian

+0

顺便说一句,已经在尝试赶上 – adrian

+0

使用另一个尝试只把睡眠() – Rasel

1

您得到该异常的原因是因为停止并重新启动单个线程对象实例是非法的。你分别在onResume/onPause中调用start/stop,但你永远不会重新分配线程对象(来自onCreate)。

为了停止并重新启动线程,您需要重新分配线程对象。

Android的源在这方面是相当明确的:

// Thread.java, line ~178 
/** 
* Reflects whether this Thread has already been started. A Thread 
* can only be started once (no recycling). Also, we need it to deduce 
* the proper Thread status. 
*/ 
boolean hasBeenStarted = false; 

// Thread.java, line ~1043 
public synchronized void start() 
{ 
    if (hasBeenStarted) { 
     throw new IllegalThreadStateException("Thread already started."); // TODO Externalize? 
    } 

    hasBeenStarted = true; // <--- Look here! 

    VMThread.create(this, stackSize); 
} 

hasBeenStarted永远不会重置回假 - 线程退出时也是如此。