2016-02-14 3 views
0

Я создаю приложение, которое меняет действия по истечении определенного периода времени, но я не могу заставить его работать. Когда я запускаю программу, я получаю только черный экран. Вот мой метод onCreate:изменение активности по истечении определенного периода времени

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    context = this; 
activity = 1; 
    i = new Intent(context, WeatherActivity.class); 
    Handler mHandler = new Handler(); 
    mHandler.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      while (true){ 
      if(activity ==1){ 
       context.startActivity(i); 
       activity = 0; 
      }else if (activity ==0){ 
       news(); 

       activity = 1; 
      } try { 
        Thread.sleep(10000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
     } 


     } 

    }, 10000L); 
} 

Деятельность - это простая деятельность только с некоторым текстом. Я пошлю их, если потребуется. Редактировать: Создал работу по изменениям в методах.

+0

http://www.androidhive.info/2013/07/how-to-implement-android-splash-screen-2/ –

+0

Как насчет моего ответа? –

ответ

1

Вы отсутствуют setContentView

super.onCreate(savedInstanceState); 
setContentView(R.layout.your_xml_name); 

Регулярно проверяйте

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.your_xml_name); 
context = this; 
activity = 1; 

Проверьте Splash screen

0

Чтобы получить вещи сделано в тандеме вы можете использовать AlarmManager.

Intent intent = new Intent("com.foo.android.MY_TIMER"); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
    AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    long now = System.currentTimeMillis(); 
    long interval = 60 * 60 * 1000; // 1 hour 
    manager.setRepeating(AlarmManager.RTC_WAKEUP, now + interval, interval, 
     pendingIntent); // Schedule timer for one hour from now and ev 

Затем расширяет BroadcastReceiver, добавляя к вашей деятельности.

общественного класса YourActivity расширяет BroadcastReceiver {

@Override 
public void onReceive(Context context, Intent intent) { 
    // your task 

} 

}

RegisterReceiver ваш BroadcastReceiver @Override защищен недействительным onResume() { super.onResume(); mIntentFilter = новый IntentFilter ("com.foo.android.MY_TIMER"); registerReceiver (mReciever, mIntentFilter); }

Не забудьте запустить это в методе OnDestroy:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(receiver); 
} 
0

Ну, я полагаю, ваша проблема в том, что вы выполняете бесконечный цикл в основном потоке, он никогда не будет иметь возможность оформить новый вид деятельности.

Возможное решение заключается в использовании AsyncTask, описанного here.

По существу, он позволяет выполнять многолетнюю задачу в фоновом режиме и публиковать результаты по основному потоку, когда они готовы.

class MyAsyncTask extends AsyncTask<Integer, Void, Void> { 
    private Context context; 

    public MyAsyncTask(Context c) { context = c; } 

    public void doInBackground(Integer... milliseconds) { 
      try { 
       for(int i = 0; i < milliseconds.length; ++i) 
        Thread.sleep(milliseconds[i]); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
    } 

    public void onPostExecute(Void result) { 
     Intent intent = new Intent(context, WeatherActivity.class); 
     context.startActivity(intent); 
    } 
} 

Теперь вы просто должны создать экземпляр и выполнить его там, где вы хотите:

new MyAyncTask(context).execute(100000); 

Вы можете также делать более сложные вещи с AsyncTask, как публикации промежуточных результатов с publishProgress и onProgressUpdate (обратитесь к документации больше информации), это был лишь базовый пример.