gpt4 book ai didi

Android:应用程序被杀死时如何保持持久性?

转载 作者:行者123 更新时间:2023-11-29 23:30:27 25 4
gpt4 key购买 nike

Android app guide建议使用与 View 分离的模型以具有持久性并解释:

Persistence is ideal for the following reasons:

  • Your users don't lose data if the Android OS destroys your app to free up resources.
  • Your app continues to work in cases when a network connection is flaky or not available.

我想知道如何在应用被杀死时应用不丢失数据?

最佳答案

这是架构模式中遵循的实践之一。这意味着View(Activity/Fragment)的作用只是显示数据,它不应该直接对数据进行更改。这反过来帮助我们解决了很多与持久化相关的问题:为了对此进行更多解释,假设您正在创建一个类似 Instagram 的应用程序,它允许当前登录的用户关注/取消关注该用户。我们希望此按钮影响带有关注者数量的标签,并相应地更改按钮上的文本。让我们通过一个代码示例来理解。

代码:

public class UserProfileActivity extends AppCompatActivity {
...

@Override
protected void onCreate(Bundle savedInstanceState) {
...
isFollowing = webService.getIsFollowing();
numberOfFollowers = webService.getNumberOfFollowers();
toggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
toggleFollow();
}
});
}

private void toggleFollow() {
if (isFollowing)
unFollow();
else
follow();
}

private void unFollow() {
isFollowing = false;
numberOfFollowers -= 1;
followersText.setText(numberOfFollowers + " Followers");
setNotFollowingButton();
}

private void follow() {
isFollowing = true;
numberOfFollowers += 1;
followersText.setText(numberOfFollowers + " Followers");
setFollowingButton();
}

private void setFollowingButton() {
toggleButton.setText("Following");
toggleButton.setBackground(getLightGreenColor());
}

private void setNotFollowingButton() {
toggleButton.setText("Follow");
toggleButton.setBackground(getGreenColor());
}

除了脏代码之外,它还有重大缺陷

  1. Activity/fragment 等应用组件不由我们管理,而是由 Android 操作系统管理。
  2. 它们的生命周期不受我们控制,它们可以根据用户交互或其他因素(如低内存)随时销毁
  3. 如果我们要在 UI 组件中创建和处理我们的数据,那么一旦该组件被销毁,我们所有的数据都会被销毁。

在此示例中,每次用户旋转设备时, Activity 都会被销毁并重新创建,导致所有数据成员重置并再次执行网络调用,浪费用户带宽并迫使用户等待新查询完成。因此最好避免 UI 中的数据处理部分

要获得更多理解和清晰度,建议您观看 Lyla 的这段视频。她用一个类似的例子解释得很好。如果您需要更清楚的信息,请告诉我视频链接:DroidCon Architectural Components另一个有用的链接:Nice article why persisting on UI is not a good choice

关于Android:应用程序被杀死时如何保持持久性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52788694/

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