代码之家  ›  专栏  ›  技术社区  ›  VSB

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

  •  1
  • VSB  · 技术社区  · 6 年前

    Android app guide

    • 如果Android操作系统为了释放资源而破坏你的应用程序,你的用户不会丢失数据。
    • 当网络连接不稳定或不可用时,您的应用程序将继续工作。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Akashdeep Singh    6 年前

    这是架构模式中遵循的实践之一。这意味着视图(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. 像activities/fragments这样的应用程序组件不是由我们管理的,而是由Android操作系统管理的。
    2. 如果我们要在UI组件中创建和处理数据,那么一旦该组件被销毁,我们的所有数据都将被销毁。

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

    为了更好的理解和清晰,我建议你看这个视频由莱拉。她用类似的例子解释得很好。请让我知道如果你需要更清楚 视频链接: DroidCon Architectural Components 另一个有用的链接: Nice article why persisting on UI is not a good choice

        2
  •  0
  •   dtunctuncer    6 年前

    • 共享首选项
    • 内部存储器
    • 外部存储器

    数据库

    link . 如果您选择使用SQLite,我建议您使用其中一个ORM库。最受欢迎的是Android的Room Persistence Library

    共享首选项

    More...

    外部/内部存储

    在设备文件系统上存储文件。它们之间的区别在于内部存储是应用程序专用的。外部存储允许您在共享文件系统中存储文件。 Writing files to internal storage Writing files to external storage