2

このコードでエラーが発生します。なんでふふ 123123123

Thread timer = new Thread()
{
    public void run()
    {
        try
        {
            sleep(1500);
            splash.setImgeResource(R.drawable.dilclogo);
            sleep(1500);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        finally
        {
            Intent intent = new Intent(MainActivity.this, MenuScreen.class);
            startActivity(intent);
        }
    }
};
timer.start();
4

6 に答える 6

3

これは、UI/メイン スレッドに他のスレッドから直接アクセスできないためです。ただし、以下のメソッドを使用して UI スレッドにアクセスできます。

  1. 使用するAsyncTask
  2. 使用するrunOnUiThread()

Android でのスレッド化に関するこの記事を読んで、この概念をよりよく理解することもできます。

于 2013-05-20T05:43:02.320 に答える
2

スプラッシュを置きます.setImgeResource(R.drawable.dilclogo); 行に runOnUiThread 。

Thread timer = new Thread()
            {
                public void run()
                {
                    try
                    {
                        sleep(2000);
                       runOnUiThread(new Runnable() {
                        public void run() {
                             splash.setImageResource(R.drawable.billboard_image);
                        }
                    });

                        sleep(2000);
                        runOnUiThread(new Runnable() {
                            public void run() {
                                 splash.setImageResource(R.drawable.square);
                            }
                        });
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                    finally
                    {
                       System.out.println("finally");
                    }
                }
            };
            timer.start();
于 2013-05-20T06:06:46.963 に答える
1

ui スレッドで ui を更新する必要があります。runonUithread を使用します。

  runOnUiThread(new Runnable() {

  @Override
  public void run() {
   // set image to imageview here
   // ui should be updated on the ui thread.
   // you cannot update ui from a background thread  
  }
 });

ただし、ハンドラーを使用することをお勧めします。

public class Splash extends Activity {

//stopping splash screen starting home activity.
private static final int STOPSPLASH = 0;
//time duration in millisecond for which your splash screen should visible to
  //user. here i have taken half second
private static final long SPLASHTIME = 500;

//handler for splash screen
private Handler splashHandler = new Handler() {
     @Override
     public void handleMessage(Message msg) {
          switch (msg.what) {
            case STOPSPLASH:
                //Generating and Starting new intent on splash time out 
                Intent intent = new Intent(Splash.this, 
                                         MainActivity.class);
                startActivity(intent);
                    Splash.this.finish(); 
                break;
          }
          super.handleMessage(msg);
     }
};

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

    //Generating message and sending it to splash handle 
    Message msg = new Message();
    msg.what = STOPSPLASH;
    splashHandler.sendMessageDelayed(msg, SPLASHTIME);
}
}

スプラッシュ.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:background="@drawable/mydrawable">
     // have a imageview and set background to imageview   

</RelativeLayout>

ハンドラーと postdelayed の使用

public class Splash extends Activity {
private static final int SPLASH_TIME = 2 * 1000;// 3 seconds

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);
    ImageView iv= (ImageView) findViewById(R.id.imageView1);
    iv.setBackgroundResource(R.drawable.afor);
    try {
    new Handler().postDelayed(new Runnable() {

        public void run() {

            Intent intent = new Intent(Splash.this,
                MainActivity.class);
            startActivity(intent);

            Splash.this.finish();
        }


    }, SPLASH_TIME);

    } catch(Exception e)
       {
        e.printStacktrace();
       }
}


@Override
public void onBackPressed() {
    this.finish();
    super.onBackPressed();
}
}

スプラッシュ.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:background="#ffffaa">

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_centerInParent="true"
     />

</RelativeLayout>
于 2013-05-20T06:12:29.043 に答える
1

Android システムでは通常のスレッドを使用できません。Androidのスレッドの例をいくつか挙げてください:D

---> Android 非同期タスク

Android デベロッパー - Android Asynctask

これは、Android の UI の読み込み効果に使用できます。

---> runOnUiThread

あなたの場合、これを使用することをお勧めします。ここで詳細を確認できます。

詳細はこちら

用途::

runOnUiThread(new Runnable() {

  @Override
  public void run() {
    // Do you ui update here
  }

});
于 2013-05-20T05:43:34.070 に答える
0
public class vv extends Activity {
    int b[] = {R.drawable.a, R.drawable.m, R.drawable.b, R.drawable.j, R.drawable.er, R.drawable.chan, R.drawable.vv};
    public ImageView i;
    int z = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        i = (ImageView) findViewById(R.id.image);
        i.setImageResource(b[0]);
        Thread timer = new Thread() {
            public void run() {
                try {
                    sleep(2000);

                    for (z = 0; z < b.length + 2; z++) {
                        if (z < b.length) {
                            sleep(2000);
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    i.setImageResource(b[z]);
                                }
                            });
                        } else {
                            z = 0;

                        }
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    System.out.println("finally");
                }
            }
        };
        timer.start();
    }


}
于 2017-02-18T10:58:09.880 に答える