私は同じようなタイトルの質問があることを知っていますが、私のものは少し異なります.....「主スレッドで処理が多すぎます」という警告が表示される原因
私は1つのアクティビティと複数のフラグメントを含むアプリケーションを持っています。アプリケーションが起動されると、ユーザーがログインしているかどうかを確認します。そうであれば、ホームページのフラグメントが起動されます。この質問の目的のために、フラグメントの代わりにログインしたというToastメッセージのポップアップがあります開始されました。アクティビティには、DrawerLayout、適切なオーバーライドメソッド、およびメインアクティビティに何をすべきかを伝える他のフラグメントからのインターフェイスメソッドも含まれています。
重いデータを取得していないか、URLの接続を行っていませんが、何らかの理由で「メインフレームでフレームがスキップされました」という警告が表示され続けます。
私はJSONファイルを取得したり、データベースに接続したりする必要があるときに、主にASyncTaskの使用に精通しています。この場合、私は自分の問題を解決する方法がわかりません。主な活動には多くのコードがあります。私は別のスレッドに配置するのが最も理にかなっていて、どうすればいいのですか?どんな提案も大歓迎です。
public class HomePage extends AppCompatActivity implements HomeFragment.OnClickedListener, CalendarFragment.OnClickedCalListener {
private FragmentTransaction ft;
private Fragment fragment;
private DrawerLayout drawerLayout;
private ListView drawerList;
private ActionBarDrawerToggle drawerToggle;
String[] drawerListItems;
private static final String PREFS_LOGGED_IN = "AreYouLoggedInFile";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);
String appVersion = "v1";
Backendless.initApp(this, "blah blah", "blah", appVersion);
if (findViewById(R.id.fragment_container) != null) {
if (savedInstanceState != null) {
}else{
Toast.makeText(getApplicationContext, "Logged In", Toast.LENGTH).show();
}
}
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolBarHome);
drawerLayout = (DrawerLayout)findViewById(R.id.homePageDrawer);
drawerList = (ListView)findViewById(R.id.homePageList);
drawerListItems = getResources().getStringArray(R.array.activities);
drawerList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,drawerListItems));
drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0: {
fragment = new CalendarFragment();
break;
}
case 1: {
fragment = new ContactsFragments();
break;
}
case 2: {
fragment = new HomeFragment();
break;
}
case 3:{
fragment = new ActivityFragment();
break;
}
case 4:{
Toast.makeText(getApplicationContext(), "Logged Out!", Toast.LENGTH_LONG).show();
Intent i = new Intent(HomePage.this, MainLoginActivity.class);
SharedPreferences myPrefs = getSharedPreferences(PREFS_LOGGED_IN, 0);
SharedPreferences.Editor editor = myPrefs.edit();
editor.putBoolean("isLoggedIn", false);
editor.commit();
startActivity(i);
finish();
break;
}
}
ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container,fragment);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
drawerLayout.closeDrawer(drawerList);
}
});
drawerToggle = new ActionBarDrawerToggle(this,drawerLayout,myToolbar,R.string.drawer_open,R.string.drawer_close)
{
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
syncState();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu();
syncState();
}
};
drawerLayout.setDrawerListener(drawerToggle);
setSupportActionBar(myToolbar);
myToolbar.setLogo(R.drawable.happy_dog_icon);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
drawerToggle.syncState();
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:{
if (drawerLayout.isDrawerOpen(drawerList)){
drawerLayout.closeDrawer(drawerList);
}else{
drawerLayout.openDrawer(drawerList);
}
return true;
}case R.id.infoActionBar:{
Toast.makeText(getApplicationContext(), "Hey", Toast.LENGTH_LONG).show();
}
default:return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0){
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
@Override
public void buttonClicked(View v) {
switch (v.getId()){
case R.id.logoutButton:{
Backendless.UserService.logout(new AsyncCallback<Void>() {
public void handleResponse(Void response) {
Toast.makeText(getApplicationContext(), "Logged Out!", Toast.LENGTH_LONG).show();
Intent i = new Intent(HomePage.this, MainLoginActivity.class);
SharedPreferences myPrefs = getSharedPreferences(PREFS_LOGGED_IN, 0);
SharedPreferences.Editor editor = myPrefs.edit();
editor.putBoolean("isLoggedIn", false);
editor.commit();
startActivity(i);
finish();
}
public void handleFault(BackendlessFault fault) {
Toast.makeText(getApplicationContext(), "Did Not Log Out!", Toast.LENGTH_LONG).show();
}
});
}
case R.id.calendarButton:{
fragment = new CalendarFragment();
break;
}
case R.id.activityButton:{
fragment = new ActivityFragment();
break;
}
case R.id.contactsButton:{
fragment = new ContactsFragments();
break;
}
}
ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container,fragment);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
は、私はあなたがコードのパフォーマンス分析ツールを実行することをお勧めしますコードを見ずに、
この機能は何ですか? 'Backendless.initApp(これは、" blah blah "、" blah "、appVersion); ' – ChampS
エミュレータを使用すると、かなり正常です。 – natario