WEB开发网
开发学院手机开发Android 开发 Gears Android WIFI/基站定位源代码分析 阅读

Gears Android WIFI/基站定位源代码分析

 2010-03-18 16:11:00 来源:WEB开发网   
核心提示:// DeviceDataProviderInterface::ListenerInterface implementation.void NetworkLocationProvider::DeviceDataUpdateAvailable(RadioDataProvider *provider) {MutexLock

// DeviceDataProviderInterface::ListenerInterface implementation.

void NetworkLocationProvider::DeviceDataUpdateAvailable(

RadioDataProvider *provider) {

MutexLock lock(&data_mutex_);

assert(provider == radio_data_provider_);

is_radio_data_complete_ = radio_data_provider_->GetData(&radio_data_);

DeviceDataUpdateAvailableImpl();

}

void NetworkLocationProvider::DeviceDataUpdateAvailable(

WifiDataProvider *provider) {

assert(provider == wifi_data_provider_);

MutexLock lock(&data_mutex_);

is_wifi_data_complete_ = wifi_data_provider_->GetData(&wifi_data_);

DeviceDataUpdateAvailableImpl();

}

无论是WIFI还是基站变化,最后都会调用DeviceDataUpdateAvailableImpl:

void NetworkLocationProvider::DeviceDataUpdateAvailableImpl() {

timestamp_ = GetCurrentTimeMillis();

// Signal to the worker thread that new data is available.

is_new_data_available_ = true;

thread_notification_event_.Signal();

}

这里面只是发了一个signal,通知另外一个线程去处理。

7.谁在等待thread_notification_event_

线程函数NetworkLocationProvider::Run在一个循环中等待thread_notification_event,当有变化 (WIFI/基站)时,就准备请求服务器查询位置。

先等待:

if (remaining_time > 0) {

thread_notification_event_.WaitWithTimeout(

static_cast(remaining_time));

} else {

thread_notification_event_.Wait();

}

准备请求:

if (make_request) {

MakeRequest();

remaining_time = 1;

}

再来看MakeRequest的实现:

先从cache中查找位置:

const Position *cached_position =

position_cache_->FindPosition(radio_data_, wifi_data_);

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Gears Android WIFI

编辑录入:coldstar [复制链接] [打 印]
赞助商链接