相关疑难解决方法(0)

如何在Java和Android开发中使用WeakReference?

我是一名Java开发人员已有2年.

但我从来没有在我的代码中写过WeakReference.如何使用WeakReference使我的应用程序更高效,尤其是Android应用程序?

java android weak-references

159
推荐指数
4
解决办法
8万
查看次数

是否收集了Java Thread Garbage

这个问题发布在某个网站上.我没有在那里找到正确的答案,所以我再次在这里发布.

public class TestThread {
    public static void main(String[] s) {
        // anonymous class extends Thread
        Thread t = new Thread() {
            public void run() {
                // infinite loop
                while (true) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    }
                    // as long as this line printed out, you know it is alive.
                    System.out.println("thread is running...");
                }
            }
        };
        t.start(); // Line A
        t = null; // Line B
        // no more references for Thread t
        // another infinite …
Run Code Online (Sandbox Code Playgroud)

java multithreading garbage-collection

84
推荐指数
4
解决办法
3万
查看次数

实现AsyncTask的正确方法是什么?静态或非静态嵌套类?

Android示例中的"Login"实现AsyncTask为非静态内部类.然而,根据Commonsguys,这个类应该是静态的,并使用弱参考外部活动看到这个.

那么实施的正确方法是AsyncTask什么?静态还是非静态?

Commonsguy Implementation
https://github.com/commonsguy/cw-android/tree/master/Rotation/RotationAsync/

从Google登录示例

package com.example.asynctaskdemo;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;

/**
 * Activity which displays a login screen to the user, offering registration as
 * well.
 */
public class LoginActivity extends Activity {
    /**
     * A dummy authentication store containing known user names and passwords.
     * TODO: remove …
Run Code Online (Sandbox Code Playgroud)

java android asynchronous android-asynctask

31
推荐指数
2
解决办法
2万
查看次数

Kotlin中的静态内在类

Inner static Class如果它存在,我可以在Kotlin语言中使用什么替代品?如果没有,当我需要static class在Kotlin中使用时,如何解决这个问题?请参阅以下代码示例:

 inner class GeoTask : AsyncTask<Util, Util, Unit>() {

    override fun doInBackground(vararg p0: Util?) {

        LocationUtil(this@DisplayMembers).startLocationUpdates()
    }
}
Run Code Online (Sandbox Code Playgroud)

我搜索了很多,没找到任何东西,非常感谢你提前.

java static class kotlin

26
推荐指数
2
解决办法
7878
查看次数

在Kotlin Android中,"这个AsyncTask类应该是静态的还是可能发生泄漏"的正确方法是什么?

这里有很多关于This class should be static or leaks might occurjava android的问题.

此Handler类应该是静态的,否则可能会发生泄漏:IncomingHandler

此Handler类应该是静态的,否则可能会发生泄漏:AsyncQueryHandler

这个AsyncTask类应该是静态的,否则可能会发生泄漏(匿名android.os.AsyncTask)

警告是由于内部类保存了对外部类的隐式引用,因此阻止了外部类的GC'd.解决方案在于警告本身应该将类声明为静态.

但是,该解决方案是特定于Java的.鉴于kotlin没有static修饰符,最接近的是伴随对象,伴随对象确实引用了它的"外部类".

以下是我的[失败]尝试的评论

class MyActivity : AppCompatActivity(), MyListener {

    companion object {
        class Attempt3Task(val callback: MyListener) : AsyncTask<Unit, Unit, Unit>() {
            override fun doInBackground(vararg params: Unit?) {
                TODO("")
            }

            override fun onPostExecute(result: Unit?) {
                callback.updateUi()
            }
        }
    }

    inner class Attempt2Task : AsyncTask<Unit, Unit, Unit> () {
        override fun doInBackground(vararg params: Unit?) {
            TODO("
        }
    }

    // Gives warning "This AsyncTask …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks kotlin android-lint

14
推荐指数
1
解决办法
4388
查看次数

android匿名异步任务 - 会导致内存泄漏

在android中,我试图防止内存泄漏。我继承了一些遗留代码,开发人员在其中创建了一个 asyncTask 作为匿名内部类,如下所示:

 void startAsyncTask() {
    new AsyncTask<Void, Void, Void>() {
        @Override protected Void doInBackground(Void... params) {
            while(true);//loop  to keep thread alive forever.
        }
    }.execute();
}
Run Code Online (Sandbox Code Playgroud)

所以我在这个例子中使用了一个循环只是为了让子线程永远活着,这样我就可以演示我的观点。所以从活动中如果我打电话startAsyncTask()会不会有内存泄漏?该类没有活动引用,但我意识到匿名类实际上是一个非静态内部类,因此拥有对外部类的引用。那么这本身就是内存泄漏是真的吗?

java android memory-leaks

5
推荐指数
1
解决办法
2733
查看次数

从onCreateLoader返回的对象不能是非静态内部成员类:DumbLoader

我试图在我的android项目中实现Cursor LoaderCustom Cursor Adapter数据库(Sqlite本地数据库).我实际上想借助Cursor Loader和Adapter`将我的listview与本地数据库中的数据异步提供.下面是我的类,子类和方法

        // Home Activity class
        public class HomeActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
                DotCursorAdapter mAdapter;
                private ListView lv;
                private  final int LOADER_ID = 1932;

         DatabaseHandler dbHelper = new DatabaseHandler(this);

         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
                setContentView(R.layout.home_activity);
             lv = (ListView) findViewById(R.id.lists);


             mAdapter = new DotCursorAdapter(this, null,0);
             lv.setAdapter(mAdapter);

             getSupportLoaderManager().initLoader(LOADER_ID, null, this);   
        }





         @Override
         public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
             return new DumbLoader(this);
         }
         @Override
         public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
             mAdapter.swapCursor(cursor); …
Run Code Online (Sandbox Code Playgroud)

android loader android-asynctask

4
推荐指数
1
解决办法
2646
查看次数

这个类是否泄漏了上下文对象?

曾经使用Android Studio的任何人都知道它有一个非常有用的代码linting容量,可以帮助程序员避免常见的反模式和错误.

然而,这样的系统有时令人烦恼,在这种特殊情况下,我认为它就是这样.

我有一个AsyncTask像下面这样的人

class MyAsyncTask extends AsyncTask<Void, Void, MyDataType> {
    private Context context;

    MyAsyncTask(Context _context) {
        context = _context;
    }

    @Override
    protected void onPreExecute() {
        // Show a progress dialog or something
        // to indicate that we're doing some work
        // here.
    }

    @Override
    protected MyDataType doInBackground(Void... args) {
        return generateData(); // returns `MyDataType` of course
    }

    @Override
    protected void onPostExecute(MyDataType data) {
        // Deliver the data and then
        context = null;
    }            
}
Run Code Online (Sandbox Code Playgroud)

当然,Android Studio正在告诉我该context …

java android

2
推荐指数
1
解决办法
642
查看次数