【发布时间】:2017-10-20 11:48:51
【问题描述】:
我是一名学生,正在编写一些应用程序来了解和学习 Android 开发。 我正在尝试编写一个应该像这样工作的应用程序:
地图活动:
显示带有用户位置的地图并在某个范围内打开访问点。 用户和AP位置应该由“MainClass”接收。
主类:
这应该完成主要工作。它应该获取用户位置,从 db 中获取开放接入点,并将通过 WifiManager 扫描发现的新开放 AP 插入到 db 中。
现在,在用户同意的情况下,MainClass 应该在后台运行,即使应用程序已关闭。
我的问题是:
- 我应该在新线程还是 UI 线程上做 MainClass 的事情?
- MainClass 应该是 AsyncTask、Service 还是其他?请告诉我为什么。
- 扫描操作返回在已注册接收器中执行的扫描。它是在 UI 线程上运行还是在新线程上运行?
提前致谢。
更新;
所以,如果我没有搞错你在说什么,服务应该是这样的:
public class MainService extends Service {
Thread mainThread;
@Override
public void onCreate() {
mainThread = new Thread(new Runnable() {
@Override
public void run() {
....
mainOperation();
....
}
});
mainThread.setPriority(Process.THREAD_PRIORITY_BACKGROUND);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
mainThread.run();
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
}
}
杀死时的 START_STICKY 是否调用 onStartCommand 或 onCreate?
【问题讨论】:
标签: android multithreading android-asynctask android-service android-broadcastreceiver