- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在谷歌上搜索了很多次,也尝试通过提出此类问题来寻找解决方案。但还没有帮助。所以我认为我的代码中可能存在一些问题。
我的应用程序的主要格言是每分钟跟踪 gps 位置并发送到服务器。并且还做一些服务器事务。所以我想启动一个后台服务,并通过 asynctask 处理服务中的所有 gps 和服务器内容。应用程序正在运行,但执行速度很慢......
这里我在我的主要 Activity 中开始了我的服务:
private void startworks() {
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, NewService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
45 * 1000, pintent);
}
@Override
protected void onStart() {
super.onStart();
startworks();
}
关于我的服务..我在这里提供全部服务..
public class NewService extends Service {
String servicestring;
String lastId = "";
String holdLastId = "";
private static final String NotificationUrl = "some url";
private static final double LATITUDE = 12.9056742;
private static final double LONGITUDE = 77.6512342;
public static final int MSG_INCREMENT = 1;
public static final int MSG_COUNTER = 2;
private final IBinder mBinder = new ServiceBinder();
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
toggleGPSOn();
sendnotification();
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
if (!wm.isWifiEnabled()) {
wm.setWifiEnabled(true);
} else {
// wm.setWifiEnabled(false);
}
// ************************Fetch InTime*******************************
AsyncTime getDate = new AsyncTime();
String returnedDateTime = "";
try {
returnedDateTime = getDate.execute().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
if (returnedDateTime.equals("2013-09-18 14:11:01.000")) {
Toast.makeText(this, "It exits", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "It doesn't exits", Toast.LENGTH_SHORT).show();
}
// *****************************----****************************************
FetchCordinates async = new FetchCordinates();
async.execute();
return START_STICKY;
}
public class ServiceBinder extends Binder {
NewService getService() {
return NewService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public void setAlarmReminder(Calendar c) {
new AlarmReminderTask(this, c).run();
}
private void toggleGPSOn() {
String provider = Settings.Secure.getString(getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (!provider.contains("gps")) {
final Intent poke = new Intent();
poke.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
}
}
public class FetchCordinates extends AsyncTask<String, Integer, String> {
public double lati = 0.0;
public double longi = 0.0;
String serverLatitude = "";
String serverLongitude = "";
String dateString;
public LocationManager mLocationManager;
public MyLocationListener mVeggsterLocationListener;
@Override
protected void onPreExecute() {
Criteria myCriteria = new Criteria();
myCriteria.setAccuracy(Criteria.ACCURACY_MEDIUM);
myCriteria.setPowerRequirement(Criteria.POWER_LOW);
mVeggsterLocationListener = new MyLocationListener();
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String myProvider = mLocationManager.getBestProvider(myCriteria,
true);
mLocationManager.requestLocationUpdates(myProvider, 500, 5,
mVeggsterLocationListener);
}
private double distance(double lat1, double lon1, double lat2,
double lon2) {
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
return (dist);
}
private double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
private double rad2deg(double rad) {
return (rad * 180.0 / Math.PI);
}
public double round(double unrounded) {
BigDecimal bd = new BigDecimal(unrounded * 1.609344f);
BigDecimal rounded = bd.setScale(1, BigDecimal.ROUND_CEILING);
Log.d("Distance Is:", "Currentlly you are " + rounded.doubleValue()
* 1000 + " meters " + "distance from Last Distance");
return rounded.doubleValue() * 1000;
}
@Override
protected String doInBackground(String... params) {
while (this.lati == 0.0) {
}
return null;
}
public class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
try {
SimpleDateFormat fmt = new SimpleDateFormat(
"dd-MM-yyyy-HH:mm:ss");
Date date = new Date();
dateString = fmt.format(date);
Log.d("DateString", dateString);
lati = location.getLatitude();
longi = location.getLongitude();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onProviderDisabled(String provider) {
Log.i("OnProviderDisabled", "OnProviderDisabled");
}
@Override
public void onProviderEnabled(String provider) {
Log.i("onProviderEnabled", "onProviderEnabled");
}
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
Log.i("onStatusChanged", "onStatusChanged");
}
}
@Override
protected void onCancelled() {
mLocationManager.removeUpdates(mVeggsterLocationListener);
}
@Override
protected void onPostExecute(String result) {
Log.d("Post Execute", "Executed");
super.onPostExecute(result);
float[] arr = new float[30];
if (round(distance(LATITUDE, LONGITUDE, lati, longi)) < 500) {
Log.d("OnPostExecute", "In");
sendServiceActiveBroadcast(true);
Thread swipeInThread = new Thread() {
@Override
public void run() {
super.run();
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(
"url...");
HttpResponse responses = client.execute(post);
int status = responses.getStatusLine()
.getStatusCode();
Log.d("Status", String.valueOf(status));
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
swipeInThread.start();
} else if (round(distance(LATITUDE, LONGITUDE, lati, longi)) > 500
&& round(distance(LATITUDE, LONGITUDE, lati, longi)) < 600) {
Log.d("OnPostExecute", "Out");
sendServiceActiveBroadcast(false);
} else {
}
}
private final void sendServiceActiveBroadcast(final boolean pActivate) {
final Intent _intent = new Intent();
_intent.setAction(BROADCAST_ACTION);
_intent.putExtra("isactive", pActivate);
NewService.this.sendBroadcast(_intent);
}
}
class AsyncTime extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... v) {
String getDateTime = "";
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(
"url..");
HttpResponse responses = client.execute(get);
int status = responses.getStatusLine().getStatusCode();
Log.d("Status For Get", String.valueOf(status));
BufferedReader bf = new BufferedReader(new InputStreamReader(
responses.getEntity().getContent()));
String datas = "";
while ((datas = bf.readLine()) != null) {
Log.d("data", datas);
try {
JSONObject jsonStuffs = new JSONObject(datas);
getDateTime = jsonStuffs.getString("inTime");
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return getDateTime;
}
}
我知道我在这里分享了大量代码。但对我来说最重要的是分享这个。
任何类型的建议和帮助都是非常值得赞赏的。
谢谢
最佳答案
我认为问题出在这段代码 returnedDateTime = getDate.execute().get();
指向此 get method
get 方法可能会等待您的 doinBackground 工作完成,这将导致等待 MainThread 并使您的应用变慢;
希望这对您有所帮助。
关于Android:Android Service强制应用程序运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158804/
我最近从 Indigo“升级”到了 Luna(Oracle OEPE 安装)。请注意围绕“升级”一词的引用。 不幸的是,事情很慢。 我使用的项目是一个 Maven 多模块项目。构建工作区操作大约需要
如果我的 JavaScript 事件似乎都不是网页性能问题的原因,我该如何诊断网页性能问题? 我有一个使用jqGrid的网络应用程序。单击网格会导致 2-3 秒的卡住,然后发生任何事情(包括点击任何单
从 appengine 访问我的应用程序时,我经常收到以下错误。有人可以知道这是什么原因吗? 原因:com.google.apphosting.api.DeadlineExceededExceptio
出于某种原因,我的 curl 调用非常慢。这是我使用的代码。 $postData = "test" $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $
Stackdriver 测试我的网站启动速度慢 我们使用 cloudflare 作为我们的站点 CDN 提供商。我们使用 stackdriver 从外部测试站点可用性,我们将时间检查间隔设置为 1 分
在插入/更新许多行时,我知道SQLite的“问题”,但事实并非如此。 我正在更新包含约250条记录的表中的ONE一行(由PK索引)中的ONE字段。查询通常需要200毫秒左右的时间。听起来很少,但很大。
我们的 Mongo 数据库会定期(有时每天一次)变慢约 30-40 分钟。在此缓慢时期,访问数据库的 API 会遇到每 5-10 分钟就会出现一次的高延迟峰值。 查看 mongod 日志文件,这两
这个问题已经在这里有了答案: 已关闭8年。 Possible Duplicate: C# WinForm Application - UI Hangs during Long-Running Oper
我最近将我的 Java Liquibase 版本从 3.5.3 升级到 3.6.3 我有一个非常繁重的环境,其中有很多数据库和表(我使用的是 Oracle)。 在这种环境下,我试图执行一个巨大的变更日
在我的项目中,为了整洁起见,模块被组织在子目录中。 我的项目目录层次结构: $ ls -R .: configure.in Makefile.am Makefile.cvs src
我正在 Debian 上使用存储库中的软件包运行 Gitlab。大多数时候Gitlab运行速度非常快,但是在较长的空闲时间后Gitlab非常慢甚至超时(错误502)。有一次我在远程 git 访问上也遇
这可能是菜鸟的错误,所以请原谅我。我在高处和低处寻找解决方案,但没有结果-因此,我想在此添加第一篇文章:-) 我有两个域类,一个称为Domain,一个称为Page。如下代码所示,域中有许多页面。 cl
我是 React 的新手,在使用 onChange 时遇到了问题在大数据列表中生成的输入字段上的方法。 如 parentcomponent是数据的拥有者,我提供了handleUpdate()子组件 (
我们使用 Webpack DefinePlugin 为不同的渲染模式生成输出包。因此,例如,我们的 webpack 配置将返回 [{ entry: { mode1: "./in
我在页面顶部有一个带有菜单的标题元素。当我向下滚动时,标题会动画到较低的高度。当我向上滚动并到达顶部时,标题会以动画方式显示为原始大小。 但它的工作并不完美。有时,事情发生之前需要两秒钟。特别是当我向
我今天在我的文本编辑器(Sublime)中写了一些正则表达式,试图快速找到特定的源代码段,这需要有点创意,因为有时函数调用可能包含更多函数调用。例如,我正在寻找 jQuery 选择器: $("div[
ParentSadly 我没有通过搜索“laggy/slow mouse wheel-scrolling in Rich Edit control”和类似的句子找到答案。 我创建了一个丰富的编辑控件
我遇到了“OR”运算符在 mysql 中未使用任何索引的典型性能问题: SELECT sms.smsID, sms.phonenumber, sms.text, date, mbr.name, mbr
我最近一直在玩 asyncio 模块。下面是我想出的用于发送一些并行请求的代码,这些请求在我的笔记本电脑 (Mac OS) 上似乎运行良好,但在另一台机器 (Ubuntu 18.04) 上似乎运行缓慢
我目前正在开发一个并行应用程序(C#、WinForms),它通过 COM 将消息注入(inject)应用程序。 此应用程序使用多个 foreach 语句,从接受 COM 的应用程序中轮询实体指标。 L
我是一名优秀的程序员,十分优秀!