Hello社区,
我已经查看了有关我的问题的论坛,但我不知道如何使用处理程序。
我的问题:
GUI具有文本字段。我创建了一个服务,它的工作原理。该服务将更新UI。
我有什么:
我的编码:
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);
}
}
好吧,我已经读过我必须使用处理程序,但我不知道如何使用它。请取悦请:-)给我一个代码剪断如何在服务的时间范围内更改textview tv1?
请问,
安迪
答案 0 :(得分:1)
服务应更新UI
不,它不会。
服务应该做一些事情让您的应用的UI层知道在后台发生的某些事件。请记住,如果用户按下了BACK或HOME或其他内容,那么前景中可能没有 您的应用的UI层。
而且,如果您对此的回答“很好,我将在这些情况下停止服务”,那么您不需要服务,应该摆脱它。服务背后的点是能够独立于UI层运行的,用于纯后台工作。
服务MyService.class启动
onStart()
已弃用大约四年。请了解现代 Android应用开发。使用onStartCommand()
,而不是onStart()
。
我已经读过我必须使用处理程序
虽然这是一种选择,但它不是我的首选。或者我的第二选择。或者我的第三选择。
我个人的首选是使用第三方消息总线,例如Otto。我没有方便的样本奥托应用程序,因为我的书中还没有涉及到这一点(虽然它在我的待办事项列表中很高......)。
我的第二选择是使用LocalBroadcastManager
。 LocalBroadcastManager
的优势在于它位于Android支持包中(您可能已经在使用它),它的工作原理与常规系统广播(您可能已经有过)相似。 Here is a sample project使用LocalBroadcastManager
。
我的第三个选择是使用实际的系统广播,服务调用sendBroadcast()
,当您的活动位于前台时,您的活动已注册BroadcastReceiver
。如果活动位于前台,则可能需要更新活动,否则显示Notification
,如this sample app所示。它还可用于允许第三方应用程序查找您的事件,前两个解决方案排除这些事件。
虽然有些情况下直接使用Handler
是一个好主意,但我想不出任何与Android新手相关的内容。