2012-11-05 4 views
8

Ho bisogno di iniziare un'attività dall'attività corrente dopo un certo periodo di tempo. Ho codificato come di seguito.Come avviare un'attività dopo un certo periodo di tempo?

public class FirstActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_first); 


    new Timer().schedule(new TimerTask(){ 
     public void run() { 
      startActivity(new Intent(FirstActivity.this, SecondActivity.class)); 
     } 
    }, 2000); 
} 

Ma non funziona..it continua a bloccarsi .. Il mio metodo è corretto? il mio file manifesto è come sotto

`

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".FirstActivity" 
     android:label="@string/title_activity_first" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".SecondActivity" 
     android:label="@string/title_activity_second" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.first.FirstActivity" /> 
    </activity> 
</application> 

+0

ciò che l'errore registra dice? hai aggiunto la tua seconda attività nel file manifest? – GoCrazy

+0

usa la funzione timer http://stackoverflow.com/questions/1877417/how-to-set-a-timer-in-android – imlearning

+0

che cos'è il registro degli errori? – jeet

risposta

0

Non so che cosa è sbagliato con il vostro codice, ma questo dovrebbe funzionare:

private Handler mHandler = new Handler(); 
mHandler.postDelayed(mStartActivityTask, 2000); 
private Runnable mStartActivityTask= new Runnable() { 
    public void run() { 
     // Start the Activity 
    } 
}; 
8

uso runOnUiThread per avviare l'attività da Timer come:

new Timer().schedule(new TimerTask(){ 
     public void run() { 
     FirstActivity.this.runOnUiThread(new Runnable() { 
      public void run() { 
      startActivity(new Intent(FirstActivity.this, SecondActivity.class)); 
      } 
     }); 
     } 
    }, 2000); 
+0

funziona molto bene, tnx – user3707644

0

Potete provare questo:

Thread toRun = new Thread() 

     { 
       public void run() 
       { 
        try {      
        sleep(500); 

        Intent intent = new Intent (FirstActivity.this, SecondActivity.class); 
        startActivity(intent); 

       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       } 
     }; 
     toRun.start(); 
+0

no amico. anche questo non funziona ... – Ram

1

Provatelo. Lo uso per uno Splash Screen nella mia app e funziona perfettamente. Inoltre, come @Venture ha sottolineato nel commento, assicurati che l'attività sia stata aggiunta al tuo file manifest.

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     Intent startActivity = new Intent(FirstActivity.this, SecondActivity.class); 
     startActivity(startActivity); 
     finish(); 
    } 
}, 2000); 
10

È possibile utilizzare il metodoHandler classe postDelayed() per eseguire questa:

Handler mHandler = new Handler(); 
mHandler.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     //start your activity here 
    } 

}, 1000L); 

Dove 1000L è il tempo in millisecondi dopo il quale sarà chiamato il codice all'interno della classe Runnable .

Prova a utilizzare questo.

0

Grazie a tutti ... sta funzionando ora .. il problema è con la seconda attività non con il timer. quando commento "getActionBar(). setDisplayHomeAsUpEnabled (true);" queste righe nella seconda attività, ha iniziato a funzionare. queste righe non danno alcun errore in fase di compilazione ma, durante il runtime, sarà un problema. Grazie.

0

L'ho trovato in rete. Avete che creare un'interfaccia ed implementare in voi classe in un metodo anonimo

public static void delay(int timeMillisecond , final DelayCallBack delayCallBack){ 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      delayCallBack.postDelay(); 
     } 
    } , timeMillisecond); 
} 

public interface DelayCallBack{ 
    void postDelay(); 
} 

Util, è lì che ho i miei metodi statici

Util.delay(delay , new Util.DelayCallBack() { 
    @Override 
    public void postDelay() { 
     startActivity(new Intent([currentContext] , [nextActivity]); 
    } 
});