应用程序以非常迟滞的方式运行。然后OutOfMemoryError

时间:2016-11-26 10:30:51

标签: java android out-of-memory

由于某些原因,我的应用程序在我的新s7边缘以非常迟滞的方式运行但在我的旧onePlus 2上工作正常。它们都运行6.0.1。我跟着this answer,但它没有解决问题。我检查了内存显示器,看到它分配了255mb !!我没有做任何计算或使用大量Bitmaps

有没有办法查看UI线程上正在运行的内容?

有人熟悉这个问题,可以帮助我吗?

编辑解决方案:

显然有些设备很难处理通过xml加载的图像。我在MainActivity中设置了背景图片,这就是应用程序如此滞后的原因。我也是在RecycleView中完成的,即使它在每个item中都是相同的小图片,它也会使应用以一种滞后的方式运行。

解决此问题的方法是从代码中动态设置所有图像。我使用Picasso就像显示的一样。 here

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(notLoggedIn()) {
        startActivity(new Intent(getApplicationContext(), LoginActivity.class));
    }
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycle_view);
    recyclerView.setAdapter(new RecycleViewPostsAdapter(MainActivity.this));
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

}

登录

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    setContentView(R.layout.activity_login);
    AppEventsLogger.activateApp(this);
    mEmailView = (AutoCompleteTextView) findViewById(R.id.email);

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions("email");
    mPasswordView = (EditText) findViewById(R.id.password);
    mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
            if (id == R.id.login || id == EditorInfo.IME_NULL) {
                attemptLogin();
                return true;
            }
            return false;
        }
    });
    final TextView register = (TextView) findViewById(R.id.textView2);
    Button mEmailSignInButton = (Button) findViewById(R.id.sign_in_button);
    mEmailSignInButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            attemptLogin();
        }
    });
    register.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(getApplicationContext(), registerActivity.class));
        }
    });
    mLoginFormView = findViewById(R.id.login_form);
    mProgressView = findViewById(R.id.login_progress);
}

recycleview

  @Override
public void onBindViewHolder(PostsVH holder, int position) {
    switch (position % 5){
        case 0:
            Picasso.with(context).load(R.mipmap.profile1).into(holder.profilePic);
...

0 个答案:

没有答案