2014-12-03 38 views
0

我正在製作一個簡單的Android應用程序,以便熟悉這個概念。我有一個有兩個活動的應用程序,第一個應該是顯示一秒鐘的啓動畫面,第二個是帶有黑色方塊的畫布,當您點擊它時變成青色。當我運行它時,它停止在日誌中出現錯誤,提示「執行停止未恢復的活動」。執行停止未恢復的活動嗎?

主要活動:

package com.example.test; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
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.activity_main); 

     try{ 
     Thread.sleep(1000); 
     }catch(Exception e){} 
     Intent in = new Intent(this, Afspl.class); 
     startActivity(in); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

下一個活動:

package com.example.test; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 

public class Afspl extends Activity { 

    public DrawView vi; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     vi = new DrawView(this); 
    } 

    class DrawView extends View{ 
     Paint paint = new Paint(); 

     public DrawView(Context context){ 
      super(context); 
     } 

     public void onDraw(Canvas c){ 
      paint.setColor(col); 
      c.drawRect(40, 40, 200, 200, paint); 

     } 

     private int col = Color.BLACK; 

     public void setToColor(int c){ 
      col=c; 
     } 
    } 

    public boolean onTouchEvent(MotionEvent me){ 
     if(me.getX()>=30 && me.getX() <= 320 && me.getY() >=30 && me.getY() <= 320)vi.setToColor(Color.CYAN); 
     return super.onTouchEvent(me); 
    } 


} 

你有,爲什麼我得到這個錯誤,或者這意味着什麼或如何解決這個任何想法?所有的幫助表示讚賞。

+0

您的線程在嘗試停止時處於睡眠狀態(因爲您在等待時調用了startActivity)。您正試圖阻止它,但它目前不處於恢復狀態。 – zgc7009 2014-12-03 19:42:12

+0

如果我使用將運行函數放入可運行類的Handler,那麼如何引用處理程序所在的MainActivity類,因爲「this」將引用可運行的? – user2649681 2014-12-03 19:46:09

+0

如果你正在學習,那麼切換你的方法,不要做閃屏。他們反Android,用戶討厭他們。你期望在網頁上看到啓動畫面嗎?當你點擊一個網頁時,會發生什麼情況,並顯示你和你必須通過的廣告對話框才能使用該頁面?吮吸不是嗎? – Simon 2014-12-03 20:14:30

回答

2

insted的使用:

try{ 
    Thread.sleep(1000); 
}catch(Exception e){} 
Intent in = new Intent(this, Afspl.class); 
startActivity(in); 

你可以嘗試使用新的

new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Intent in = new Intent(getApplicationContext(), Afspl.class); 
       startActivity(in); 
      } 
}, 1000); 

你不應該把睡在主線程。如果您想在未來使用HandlerRunnable

另外,您應該在兩個活動中聲明一個視圖,而不僅僅是第一個視圖。創建一個視圖並在第二個活動中使用「setContentView()」進行設置。

+0

像這樣,Intent構造函數中的'this'將是runnable而不是MainActivity。我如何引用MainActivity? – user2649681 2014-12-03 19:44:17

+0

@ user2649681而不是使用這個,使用MainActivity.this – zgc7009 2014-12-03 19:47:50

+0

@ user2649681這將是MainActivity,而不是Runnable。你有沒有嘗試過這些代碼? – Storo 2014-12-03 19:52:01