首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓开发,onClickListener不工作

安卓开发,onClickListener不工作
EN

Stack Overflow用户
提问于 2013-03-29 21:10:37
回答 2查看 653关注 0票数 1

我是一个全新的Android开发新手,我正在写一本书(实用android4游戏开发)来制作一个叫做starfighter的游戏。这是菜单屏幕上的一个问题。

用于工作的退出按钮,并关闭应用程序。自从我在后台播放音乐之后,它就不再工作了。点击退出停止音乐,但不会关闭应用程序,我不知道为什么,有什么帮助吗?代码如下:

SFMainMenu.java:

代码语言:javascript
复制
package com.example.starfighter;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class SFMainMenu extends Activity {

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

        //Fire up background music
        SFEngine.musicThread = new Thread(){
            public void run(){
                Intent bgmusic = new Intent(getApplicationContext(), SFMusic.class);
                startService(bgmusic);
                SFEngine.context = getApplicationContext();
            }
        };
        SFEngine.musicThread.start();

        final SFEngine engine = new SFEngine();

        //Set menu button options
        ImageButton start = (ImageButton)findViewById(R.id.btnStart);
        ImageButton exit = (ImageButton)findViewById(R.id.btnExit);

        start.getBackground().setAlpha(SFEngine.MENU_BUTTON_ALPHA);
        start.setHapticFeedbackEnabled(SFEngine.HAPTIC_BUTTON_FEEDBACK);

        exit.getBackground().setAlpha(SFEngine.MENU_BUTTON_ALPHA);
        exit.setHapticFeedbackEnabled(SFEngine.HAPTIC_BUTTON_FEEDBACK);

        start.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                //Start the game!!!
            }
        });

        exit.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                boolean clean = false;
                clean = engine.onExit(v);
                if(clean){
                    int pid = android.os.Process.myPid();
                    android.os.Process.killProcess(pid);
                }
            }
        });
    }

}

SFEngine.java

代码语言:javascript
复制
package com.example.starfighter;

import android.view.View;
import android.content.Context;
import android.content.Intent;

public class SFEngine {

    //Constants that will be used in the game
    public static final int GAME_THREAD_DELAY = 4000;
    public static final int MENU_BUTTON_ALPHA = 0;
    public static final boolean HAPTIC_BUTTON_FEEDBACK = true;
    public static final int SPLASH_SCREEN_MUSIC = R.raw.looptrouble;
    public static final int R_VOLUME = 100;
    public static final int L_VOLUME = 100;
    public static final boolean LOOP_BACKGROUND_MUSIC = true;
    public static Context context;
    public static Thread musicThread;

    //Kill game and exit
    public boolean onExit(View v){
        try{
            Intent bgmusic = new Intent(context, SFMusic.class);
            context.stopService(bgmusic);
            musicThread.stop();
            return true;
        }catch(Exception e){
            e.printStackTrace();
            return false;
        }
    }

}

Eclipse在musicThread.stop()行上给出了一个警告-来自Thread类型的方法stop已被弃用。

提前感谢!:)

编辑:

还添加了这个类,SFMusic,这可能是相关的:

代码语言:javascript
复制
package com.example.starfighter;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.content.Context;

public class SFMusic extends Service {

    public static boolean isRunning = false;
    MediaPlayer player;

    @Override
    public IBinder onBind(Intent arg0){
        return null;
    }

    @Override
    public void onCreate(){
        super.onCreate();
        setMusicOptions(this, SFEngine.LOOP_BACKGROUND_MUSIC, SFEngine.R_VOLUME, SFEngine.L_VOLUME,
                SFEngine.SPLASH_SCREEN_MUSIC);
    }

    public void setMusicOptions(Context context, boolean isLooped, int rVolume, int lVolume, int soundFile){
        player = MediaPlayer.create(context, soundFile);
        player.setLooping(isLooped);
        player.setVolume(rVolume, lVolume);
    }

    public int onStartCommand(Intent intent, int flags, int startId){
        try{
            player.start();
            isRunning = true;
        } catch(Exception e){
            isRunning = false;
            player.stop();
        }
        return 1;
    }

    public void onStart(Intent intent, int startId){

    }

    public void onStop(){
        isRunning = false;
    }

    public IBinder onUnBind(Intent arg0){
        //TODO Auto-generated method stub
        return null;
    }

    public void onPause(){

    }

    @Override
    public void onDestroy(){
        player.stop();
        player.release();
    }

    @Override
    public void onLowMemory(){
        player.stop();
    }

}

我尝试在onClick方法中添加一个println作为第一行代码。没有向控制台输出任何内容,因此我不确定是否调用了该方法。但是后来我搞不懂为什么音乐还在停止。

EN

回答 2

Stack Overflow用户

发布于 2013-03-29 21:15:36

代码语言:javascript
复制
Use 

System.exit(0);

Before that 

stopservice();
Thread.stop();

should be done
票数 0
EN

Stack Overflow用户

发布于 2013-03-29 21:57:26

我建议你删除按ID终止进程的代码,因为这是一个糟糕的做法,而且Android可能会重启终止的应用程序。请改用finish();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15703938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档