Handler.post延迟使用来自XML文件

时间:2017-07-04 08:36:58

标签: android xml

想要将我的应用程序的数字常量传输到res/value/integers.xml下的文件。

我遇到了一个令人困惑的问题。它涉及函数Handler.postDelayedActivity_A中的代码:

new Handler().postDelayed(new Thread() {
@Override
public void run() {
            Intent i_activity_b = new Intent(Activity_A.this, Activity_B.class);
            Activity_A.this.startActivity(i_activity_b);
            Activity_A.this.finish();
            getApplicationContext().stopService(some_service);;
        }
}, Data.GAME_THREAD_DELAY);

这段代码应该运行Activite_A,以及some_service一段时间(GAME_THREAD_DELAY)。

停止,停止some_service并启动Activity_B

结果

只要参数GAME_THREAD_DELAY取自类(Data.GAME_THREAD_DELAY),一切都可以。如果我从xml文件(@ integer / GAME_THREAD_DELAY)中删除它,则无效(Activity_B无法启动)!!

有人可以帮助我吗?

以下是更多详情: MainActivity:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    final Intent musicIntent = new Intent(this, Music.class);
    musicIntent.putExtra("musicToPlay", Data.SPLASH_MUSIC);
    startService(musicIntent);

    Data.display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Data.context = getApplicationContext();

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

    ImageView title_img = (ImageView) findViewById(R.id.title);
    Animation title_animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
    title_img.startAnimation(title_animation);


    new Handler().postDelayed(new Thread() {
        @Override
        public void run() {
            Intent mainMenu = new Intent(MainActivity.this, MenuActivity.class);
            MainActivity.this.startActivity(mainMenu);
            MainActivity.this.finish();
            getApplicationContext().stopService(musicIntent);;
        }
    }, Data.GAME_THREAD_DELAY);
}}

MenuActivity:

public class MenuActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    final Intent musicIntent = new Intent(this, Music.class);
    musicIntent.putExtra("musicToPlay", Data.Menu_MUSIC);
    startService(musicIntent);

    Data.context = getApplicationContext();

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);
}}

服务:

public class Music extends Service {
public static boolean isRunning = false;
MediaPlayer player;

public SolarisMusic() {
}

public int onStartCommand(Intent intent, int SoundFile, int startId) {
    private static final String TAG = "Music";
    super.onStartCommand(intent, SoundFile, startId);
    Bundle extras = intent.getExtras();
    if(extras == null) {
        Log.d(TAG,"null");
    } else {
        int from = extras.getInt("musicToPlay");
        if(from == Data.SPLASH_MUSIC){
            player = MediaPlayer.create(Data.context, Data.SPLASH_MUSIC);
            player.setLooping(Data.LOOP_BACKGROUND_MUSIC);
            player.setVolume(Data.R_VOLUME, Data.L_VOLUME);
            player.start();
        }
        else{
            player = MediaPlayer.create(Data.context, Data.Menu_MUSIC);
            player.setLooping(Data.LOOP_BACKGROUND_MUSIC);
            player.setVolume(Data.R_VOLUME, Data.L_VOLUME);
            player.start();
        }
    }
    return 1;
}
@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}
public IBinder onUnBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
public void onStop() {
    isRunning = false;
}
public void onPause() { }
@Override
public void onCreate() {
    super.onCreate();
}
@Override
public void onDestroy() {
    player.stop();
    player.release();
}
@Override
public void onLowMemory() {
    player.stop();
}}

1 个答案:

答案 0 :(得分:0)

根据你的问题下面的评论,你试图将整数资源的ID作为延迟(而不是该资源的值)传递。

正确的代码看起来应该是这样的(假设您的整数资源的名称是GAME_THREAD_DELAY):

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent mainMenu = new Intent(MainActivity.this, MenuActivity.class);
        startActivity(mainMenu);
        stopService(musicIntent);
        finish();
    }
}, getResources().getInteger(R.integer.GAME_THREAD_DELAY));