gpt4 book ai didi

android - 创建 BroadcastReceiver 的最佳方法是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 07:38:13 24 4
gpt4 key购买 nike

我花了几天时间在Service + BroadcastReceiver上工作,但仍然无法做到完美。希望有人能帮忙,谢谢!

我正在编写一个应用程序,在 map 上显示用户当前位置(我编写的 map ,而不是谷歌地图),并在用户进入预定义区域内时发出通知警报。

在我的代码中。有两个主要对象。 GPS 服务和主要 Activity 。

位置改变时 GPS 服务广播位置。主 Activity 通过 BroadcastReceiver 接收最新位置。

我对如何注册 BroadcastReceiver 做了一些研究。我发现有两种方法:


方法 1 - 在 Activity 中注册广播接收器(我在我的代码中使用了这个方法。我需要更新 map 上的最新位置)

主要.java:

public class Main extends Activity{
.
.
.
public class MyLocReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub

Bundle bundle=intent.getExtras();
String locData = bundle.getString("loc");

// Some work


}
public MyLocReceiver(){
Log.e(TAG, "in MyReceiver()");
}

}

private MyLocReceiver myLocReceiver;

// Register BroadcastReceiver
if (myLocReceiver == null)
{
Common.writeFile("service.txt", "Main - in myBindService() register receiver" + "\n", true);

myLocReceiver=new MyLocReceiver();

registerReceiver(myLocReceiver, new IntentFilter("com.nwfb.LOC_DATA"));
}

方法二——在Manifest.xml中注册BroadcastReceiver

list .xml:

    <receiver android:name=".LocationBoardcastReceiver" android:enabled="true"> 
<intent-filter>
<action android:name="com.abc.LOC_DATA" />
</intent-filter>
</receiver>

LocationBoardcastReceiver.java:

    public class LocationBoardcastReceiver extends BroadcastReceiver {
private static final String TAG = LocationBoardcastReceiver.class.getSimpleName();

@Override
public void onReceive(Context context, Intent intent) {

Bundle bundle=intent.getExtras();
// Do something
}
}

* 我想要的是 BroadcastReceiver 在应用程序生命周期内不得被操作系统杀死。此外,BroadcastReceiver 必须能够将数据传递到我的 Main.java

我读了这篇文章: http://developer.android.com/reference/android/content/BroadcastReceiver.html

'Receiver Lifecycle' 和 'Process Lifecycle' 部分声明 BroadcastReceiver 将在 onReceive(Context, Intent) 调用后结束并且不再活跃。

我正在使用方法 1,我可以从该服务接收超过 1 个位置数据。我发现如果 BroadcastReceiver 一直从 Broadcast 接收数据,BroadcastReceiver 就会保持 Activity 状态。如果我在“设置 -> 位置”中关闭 GPS 并让 BroadcastReceiver 闲置大约 1 到 2 小时,那么 BroadcastReceiver 将被操作系统杀死。


如果 BroadcastReceiver 闲置太久,操作系统会终止它吗?如果 BroadcastReceiver 一直在接收广播,操作系统不会终止它吗?

BroadcastReceiver(方法一和方法二)在内存压力过大的情况下会被操作系统杀死吗?

对于方法 2,LocationBoardcastReceiver.java 是否可以将数据发送到正在运行的 Activity(例如:Main、java)?

对于方法 1,有什么方法可以让 BroadcastReceiver 在 Main.java(主 Activity )的生命周期内保持 Activity 状态?

最佳答案

  1. Android 操作系统可以随时终止服务和 Activity 。你对此无能为力。

  2. 即使应用未激活,您也可以设置广播接收器启动服务。

  3. 如果您想一直接收位置更新,则需要始终让设备处于唤醒状态。这会在数小时内耗尽电池电量。

有关位置更新的最佳实践,请阅读:http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html?m=1

关于android - 创建 BroadcastReceiver 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7636273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com