在 onCreate() 之前,Android 系统服务不可用于活动 [关闭]

Posted

技术标签:

【中文标题】在 onCreate() 之前,Android 系统服务不可用于活动 [关闭]【英文标题】:Android System services not available to Activities before onCreate() [closed] 【发布时间】:2013-01-28 00:23:08 【问题描述】:
....    

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    ...

done = true;


...


public class addcontacts extends ListActivity 

     protected void onCreate() 

     
     protected void execute(final Boolean success) 
if (done) 
         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems);
         setListAdapter(adapter);

     

 


public class UserLoginTask extends AsyncTask<Void, Void, Boolean> 

@Override
    protected Boolean doInBackground(Void... params) 

...


 @Override
    protected void onPostExecute(final Boolean success) 

            setContentView(R.layout.main);


            ac = new addcontacts();
            ac.execute(true);


    

...

public class getcontacts extends AsyncTask<Void, Void, Boolean> 
    @Override
    protected Boolean doInBackground(Void... params) 


...
listItems.add(json_data.getString("login") + " " + derp);
...


...


 @Override
    protected void onPostExecute(final Boolean success) 
        getc = null;
        //showProgress(false);
        adapter.notifyDataSetChanged();

运行时错误:

 02-12 15:59:35.274: E/AndroidRuntime(1308): FATAL EXCEPTION: main
 02-12 15:59:35.274: E/AndroidRuntime(1308): java.lang.IllegalStateException: System services not available to Activities before onCreate()
 02-12 15:59:35.274: E/AndroidRuntime(1308):    at android.app.Activity.getSystemService(Activity.java:3989)

 02-12 15:59:35.274: E/AndroidRuntime(1308):    at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
 02-12 15:59:35.274: E/AndroidRuntime(1308):    at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)

有什么解决办法吗?

【问题讨论】:

是的,它不可用。你现在有什么问题? 只是不要太早访问它? 在 Activity 完全构建之前没有可用的系统服务。即调用 onCreate() 返回。 你在哪里打电话execute() 【参考方案1】:

唯一损坏的是您的代码。修复方法是避免在 onCreate() 完成之前访问系统服务,否则还没有对活动对象进行设置,因此您将面临自我解释的原因异常。

【讨论】:

addcontacts 类在应用程序完全启动 30 秒后创建 您的代码已损坏。除非完成onCreate(),否则您无法访问系统服务。时期。也许你也有糟糕的设备或者糟糕的设备 + 安装了很多垃圾,这使得它变得迟钝,但这对框架的工作方式没有影响。您最好尝试分析您的应用或尝试找到罪魁祸首并修复它。 安卓虚拟设备 不过,30 秒还是很多。这不正常,即使在运行 JB 的 AVD 模拟平板电脑上也是如此 我刚刚更新了我的第一篇文章。添加了done 变量。执行if(done) 内的代码,表示 onCreate 已完成

以上是关于在 onCreate() 之前,Android 系统服务不可用于活动 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

android 关于为什么在onCreate里调用view.getChildAt.getLeft() 没有值!

在启动activity之前,调用application的oncreate

android 开发中 使用Application类 为啥OnCreate()方法没被调用?

Android在onCreate()方法中动态获取TextView控件的高度

Android的onCreate里边savedInstanceState啥时候不为空

Android 面试之必问Android基础