[英]change activity after a certain time period
我正在創建可以在一段時間后更改活動的應用程序,但是我無法使其正常運行。 當我運行程序時,我只會看到黑屏。 這是我的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);
}
活動只是帶有一些文本的簡單活動。 如有需要,我會發布它們。 編輯:通過改變方法的活動使其起作用。
您缺少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;
檢查啟動畫面
要同時完成任務,可以使用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受保護的void onResume(){super.onResume(); mIntentFilter = new IntentFilter(“ com.foo.android.MY_TIMER”); registerReceiver(mReciever,mIntentFilter); }
記住要在onDestroy方法中運行它:
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
好吧,我想您的問題是您正在主線程中執行無限循環,它將永遠不會有機會繪制新的活動布局。
一個可能的解決方案是使用此處描述的AsyncTask
。
本質上,它允許您在后台執行長時間運行的任務,並在准備好結果后將結果發布到主線程上。
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
發布中間結果(有關更多信息,請參見文檔),這只是一個基本示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.