2015-07-16 2 views
0

Я пытался выполнить одно действие после выполнения другого, используя потоки и используя метод сна класса thread. Вот код,Выполнение нескольких действий в Android

package com.example.admin.myapplication; 

import android.content.Intent; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity extends ActionBarActivity { 

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layo); 
     Thread th=new Thread() { 
      public void run() 
      { 
       try 
       { 

        Thread.sleep(3000); 
       } 
       catch(InterruptedException i) 
       { 
        i.printStackTrace(); 
       } 
       finally 
       { 
        Intent io=new Intent("com.example.admin.myapplication.NEWATTEMPT"); 
        startActivity(io); 
       } 
      } 

     }; 
     th.start(); 

    } 

Код для layo.xml

это-
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:background="@drawable/pic"> 

</LinearLayout> 

и NewAttempt является еще ява class-

Мой вопрос здесь this- В строка №. 16 из MainActivity, я устанавливаю содержимое в файл layo.xml, а после этого создаю экземпляр класса потока и запускаю его, , но если я поместил setContentView (R.layout.layo) в блок try, то его показывая ошибку, при запуске приложения. Почему это так? Может кто-нибудь объяснить, почему?

И может кто-нибудь объяснить, как выполнение происходит в android, т. Е. Порядок чтения файлов? Я новичок в Android, и я не очень понимаю, как управление перетекает из одной активности в другую?

+2

Если вы сделаете это (есть setContentView в Ьгу блоке) Ваша попытка находится внутри Thread. Вам нужно сделать это на нити ui. Существует файл манифеста, в котором вы объявляете действия. Android анализирует этот xml и ищет активность запуска для запуска вашего первого действия. Прочтите документы для получения дополнительной информации об этом. http://developer.android.com/index.html – Raghunandan

ответ

1

Всякий раз, когда вы хотите изменить свой вид внутри Activity, вам нужно сделать это в своей деятельности (ui). Синхронизация потока пользовательского интерфейса. Активности есть метод, который может обрабатывать вашего Runnable метода

runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      //your method that modify view 
     } 
    }); 

В вашем случае, вы можете поставить выше внутри нити

Thread th = new Thread() { 
     public void run() 
     { 
      try 
      { 
       MainActivity.this.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         //your method that modify view 
         MainActivity.this.setContentView(R.layout.layo); 
        } 
       }); 
       Thread.sleep(3000); 
      } 
      catch(InterruptedException i) 
      { 
       i.printStackTrace(); 
      } 
      finally 
      { 
       Intent io = new Intent("com.example.admin.myapplication.NEWATTEMPT"); 
       startActivity(io); 
      } 
     } 

    }; 
    th.start(); 
+1

Во всяком случае, я думаю, что вам не нужно устанавливатьContentView() внутри вашего потока. Скажи мне, зачем тебе это нужно? Если это только для тестирования, тогда это нормально. – HendraWD

+0

-Это только для тестирования –

+0

так, теперь это сработало? – HendraWD

0

Если вы хотите, чтобы сделать модель заставки деятельности, а затем попробовать таймер () и планировать его. попробуйте этот код внутри OnCreate метод () например:

Timer timer=new Timer(); 
    timer.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      Intent intent=new Intent(MainActivity.this, NEWATTEMPT.class); 
      startActivity(intent); 
     } 
    },1000); 
Смежные вопросы