我是一名学生正在编写一些应用来理解和学习Android开发。 我正在尝试编写一个应该像这样工作的应用程序:
显示包含用户位置的地图并在范围内打开接入点。 用户和AP的位置应由“MainClass”接收。
这应该做主要工作。它应该获得用户位置,从db获取开放访问点并插入使用WifiManager扫描找到的db new open AP。
现在,即使应用程序已关闭,MainClass也应该在后台工作,用户同意。
我的问题是:
提前致谢。
UPDATE;
所以,如果我没有弄乱你在说什么,服务应该是这样的:
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();
}
}
在killStartCommand或onCreate上执行START_STICKY?
答案 0 :(得分:0)
- 我应该在新线程或UI线程上执行MainClass内容吗?
醇>
<强>答案:强> 你应该在后台线程(新线程)做,因为如果你在UI线程UI上做时间操作,android也不允许在UI线程上进行网络任务将冻结
- MainClass应该是AsyncTask,Service还是其他?请告诉我为什么。
醇>
<强>答案:强> 正如您明确表示您的要求(MainClass应该在后台工作),您需要使用Service,因为即使您的应用被杀,服务也会在后台运行
答案 1 :(得分:0)
您应该将MainClass.java内容用于后台线程。即服务
服务将通过广播接收器触发数据。
广播接收器将数据发送到MapActivity.java。注册接收者的onReceive()方法总是在UI线程中运行。
如果要在前台运行MainClass.java,可以使用MVP模式。你应该把你的东西放到表示层。
答案 2 :(得分:0)
后台服务将是我猜的最佳和唯一的解决方案。因为即使应用程序关闭,您也希望自己的操作继续运行。