我只想在我的android应用程序中运行一次特定的代码。共享首选项解决方案不是解决方案,因为当您转到应用程序管理器并执行清除数据时,共享首选项将被删除,因此应用程序将其视为新的安装。我甚至尝试过应用程序类,但失败了,它的工作原理与共享首选项相同。任何帮助,除了共享的首选项和应用程序类将不胜感激。谢谢。 最佳答案 答案取决于“只有一次”的含义。每个应用程序安装一次设置 >。如果用户清除数据,或卸载然后重新安装,则代码将再次运行。每个设备一次在external storage上的已知位置保存空文件(标记文件)。你可以这样做:在应用程序自己的存储中,卸载时将清除,但在用户点击清除数据时不会清除。在shared external storage第二种方法是有希望的:它能够抵抗清晰的数据和重新安装。但是,在存储可移动或不可卸载的地方使用外部存储是很棘手的,而且我不确定如果存储不可用,您的回退会是什么。(提示:快速失败)。您也可能不相信您的用户不会(意外地或故意地)删除精心放置的文件。每个用户一次我认为这超出了这个问题的范围。但你应该先看看AccountManager文档,然后从那里开始。每台设备一次,这次说真的好,所以:如果无法读取外部存储,我们不希望快速失败。我们不想对上面的内容做任何修饰,因为坏角色会删除外部存储器上的标志文件,并清除数据。我们每次只能对一个设备执行一次操作,即使设备已在出厂时重置并且外部存储已被擦除?我们必须用一个外部源来检查它,这个外部源可以存储这个设备的状态;我们称之为“服务器”。我们需要一个标识符来唯一地向服务器标识我们自己。通常,您会生成一个UUID,并将其存储在某个地方。但我们不能相信我们的任何存储选择。所以我们需要从静态外部环境生成一个标识符。iphone现在的deprecated UDID正是这个,generated from various hardware identifiers。复制this link将是一个很好的开始,但取决于您的安全许可,您可能希望自己创建。如果世界上的每个人都使用了你的应用程序或与你的应用程序相同的算法,可能会有隐私问题(这就是为什么苹果不赞成udid,以及为什么每个应用程序都应该使用自己的uuid)。不管怎样,这都是一个非常大的工程(包括服务器)的工作(最多)一个边缘的情况,所以我会避免它。更糟糕的是,它将你的应用程序与互联网连接联系起来,这取决于你的上下文,可能是一件坏事。此外,根设备将有权更改任何或所有这些标识符。从那以后就有点哲学了。每个应用程序生存期一次手动操作。说真的,在部署之前或者之后的某个时候用手来做。如果你需要选择一个获胜的设备,那么你需要一个服务器和一些识别设备的方法,如上所述。手动操作,然后选择并告诉获胜者。但这也超出了安卓问题的范围。
09-10 06:11
查看更多