Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:在服务内的时间任务更新GUI_Java_Android - Fatal编程技术网

Java Android:在服务内的时间任务更新GUI

Java Android:在服务内的时间任务更新GUI,java,android,Java,Android,社区你好 关于我的问题,我已经在论坛上看过了,但我不知道如何使用处理程序 我的问题: GUI有一个文本字段。我创建了一个服务,它可以工作。服务应更新用户界面 我所拥有的: 安卓Galaxy S Handy 靛蓝服务发布2 我的编码: public class SamsungLoc1 extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInsta

社区你好

关于我的问题,我已经在论坛上看过了,但我不知道如何使用处理程序

我的问题:
GUI有一个文本字段。我创建了一个服务,它可以工作。服务应更新用户界面

我所拥有的:

  • 安卓Galaxy S Handy
  • 靛蓝服务发布2
我的编码:

public class SamsungLoc1 extends Activity implements OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_samsung_loc1);

    buttonStart = (Button) findViewById(R.id.buttonStart);
        buttonStop = (Button) findViewById(R.id.buttonStop);

        buttonStart.setOnClickListener(this);
        buttonStop.setOnClickListener(this);

        TextView tv1 = (TextView) findViewById(R.id.TextView01);
        tv1.setText("initial1");
    }

    public void onClick(View src) {
        switch (src.getId()) {
        case R.id.buttonStart:
          startService(new Intent(this, MyService.class));
          break;
        case R.id.buttonStop:
          Log.d(TAG, "onClick: stopping srvice");
          break;
        }
      } 
}   
因此,单击开始按钮时,服务MyService.class将启动:

public class MyService extends Service {
    private static final String TAG = "MyService";
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
    }

    @Override
    public void onDestroy() {
    }

    @Override
    public void onStart(Intent intent, int startid) {
          Timer t = new Timer();
            t.scheduleAtFixedRate(new TimerTask() {
//              @Override
                public void run() {

//Here I would like to change the textview of the UI

                            tv1.setText("New Information");



                }                    
           },0,300000);     
    }
}
嗯,我已经读到我必须使用处理程序,但我不知道如何使用它。能不能请:-)给我一个剪短的代码如何更改服务的timertask内的textview tv1

亲切问候,
安迪

服务应更新用户界面

不,不应该

该服务应该做一些事情,让你的应用程序的UI层知道一些发生在后台的事件。请记住,如果用户按下BACK或HOME或其他按钮,前台可能没有应用程序的UI层

而且,如果您对此的回答是“好吧,我将在这些情况下停止服务”,那么您不需要服务,应该将其丢弃。服务背后的要点是能够独立于UI层运行,用于纯后台工作

服务MyService.class启动

onStart()
已被弃用约四年。请学习现代Android应用程序开发。使用
onStart命令()
,而不是
onStart()

我已经读到我必须使用处理程序

虽然这是一种选择,但它不是我的第一选择。或者我的第二选择。或者我的第三选择

我个人的第一选择是使用第三方消息总线,例如。我手边没有Otto应用程序示例,因为我的书中还没有介绍过这一点(尽管它在我的待办事项列表中很重要…)

我的第二个选择是使用
LocalBroadcastManager
LocalBroadcastManager
的优点是它位于Android支持包中(您可能已经在使用),它的工作原理与常规系统广播(您可能已经有过使用经验)。使用
LocalBroadcastManager

我的第三个选择是使用实际的系统广播,其中您的服务调用
sendBroadcast()
,并且您的活动在前台时有一个注册的
BroadcastReceiver
。如果某个活动位于前台,则可能需要更新该活动,否则会显示
通知,这一点非常有用,如中所示。允许第三方应用程序了解您的活动也很有用,前两个解决方案排除了这一点


虽然在某些情况下直接使用
处理程序是个好主意,但我想不出任何与Android新手相关的方法。

您真的需要服务来更新UI吗?您好,Commonware,非常感谢您的回复。因此,我将查看LocalBroadcastManager或系统广播。还感谢您提供的示例提示。我会尽力理解的:-)安迪,请代我问候