Android 获取已完成方法的静态时间
我正在为Android开发音乐播放器,我需要获得静态时间才能开始播放音乐。Acutally command context.player.start()从[ms]范围内随机抽取时间,但我需要获取完成方法的静态时间。我的代码如下。我的意思是“调用方法之前的时间”和“方法完成之后的时间”之间的时间差需要是静态的(方法应该占用静态时间)Android 获取已完成方法的静态时间,android,audio,android-audiomanager,android-music-player,Android,Audio,Android Audiomanager,Android Music Player,我正在为Android开发音乐播放器,我需要获得静态时间才能开始播放音乐。Acutally command context.player.start()从[ms]范围内随机抽取时间,但我需要获取完成方法的静态时间。我的代码如下。我的意思是“调用方法之前的时间”和“方法完成之后的时间”之间的时间差需要是静态的(方法应该占用静态时间) 公共类SpeakerActivity扩展了AppCompativity{ 音乐播放器; @凌驾 创建时受保护的void(Bundle savedInstanceSta
公共类SpeakerActivity扩展了AppCompativity{
音乐播放器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动和扬声器);
player=新音乐播放器(SpeakerActivity.this);
run();
}
私家车{
AsyncTask.execute(新的Runnable(){
@凌驾
公开募捐{
ClientTask ct=新的ClientTask(SpeakerActivity.this);
试一试{
ct.run();
}捕获(IOE1异常){
e1.printStackTrace();
}
}
});
}
}
公共类ClientTask扩展了侦听器{
ClientTask(上下文){this.Context=Context);}
...
//我只打算从Listener.class实现这个方法,因为我只需要使用这个方法。
收到公共无效(连接c、对象p){
//收到的数据包是否与PacketMessage.class属于同一类?
if(p PacketMessage实例){
//将其强制转换,以便我们可以访问其中的消息。
PacketMessage packet=(PacketMessage)p;
if(packet.message.charAt(0)='p'){
字符串latencyString=packet.message.replace('p','0');
int latency=Integer.parseInt(latencyString);
试一试{
睡眠(延迟);
context.player.start();什么是静态时间?你想要什么,你得到了什么?阅读你的标题,你完全不清楚你想要什么。你想要增加0-20毫秒的延迟吗?或者你有延迟,你想摆脱它吗?请更新问题好的,我刚刚更新。现在清楚了吗?你是说恒定时间?就像它总是以相同的时间执行一样我?或者你想让它执行得更快,以便更具响应性?是的,我指的是固定时间。没有必要执行得更快或更慢。我只需要获得固定的执行时间。我在类上下文中找不到名为player
的成员或方法,所以我对行执行(甚至编译)感到惊讶.在哪里player
被定义为上下文的成员?
public class SpeakerActivity extends AppCompatActivity {
MusicPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_speaker);
player = new MusicPlayer(SpeakerActivity.this);
run();
}
private void run() {
AsyncTask.execute(new Runnable() {
@Override
public void run() {
ClientTask ct = new ClientTask(SpeakerActivity.this);
try {
ct.run();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
}
}
public class ClientTask extends Listener {
ClientTask(Context context) { this.context = context);}
...
//I'm only going to implement this method from Listener.class because I only need to use this one.
public void received(Connection c, Object p){
//Is the received packet the same class as PacketMessage.class?
if(p instanceof PacketMessage){
//Cast it, so we can access the message within.
PacketMessage packet = (PacketMessage) p;
if(packet.message.charAt(0) == 'p') {
String latencyString = packet.message.replace('p','0');
int latency = Integer.parseInt(latencyString);
try {
Thread.sleep(latency);
context.player.start(); <---- THIS LINE TAKE RANDOM AMOUNT OF TIME
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class MusicPlayer {
private MediaPlayer player;
private Context context;
public MusicPlayer(Context context) {
this.context = context;
player = MediaPlayer.create(context, R.raw.zero);
}
public void start() {
player.start();
}
public void stop() {
player.stop();
}
}