我一直在尝试使用 Android 的 Baseline Profile 和 MacroBenchmark 库来提高应用程序性能。
我的问题是,建议MacroBenchmark 的构建类型尽可能接近构建release,但符合-dontobfuscateproguard 规则。
如果生产应用程序将通过obfuscated,minification那么 Baseline Profiler 如何帮助提高应用程序性能,因为baseline-prof.txt应用程序classes.dex文件中的类可能完全不同。
Profiler 和 Proguard/R8 之间是否存在某种内部映射?
在 Kotlin/Android 活动/片段中定义全局变量的最佳方法是什么?
当您应该使用这 2 种方法来定义全局变量时,有哪些不同的场景:
var viewpager: CustomViewPager? = null
Run Code Online (Sandbox Code Playgroud)
或者
lateinit var viewpager: CustomViewPager
Run Code Online (Sandbox Code Playgroud)
?
如果我使用前者,我将不必在我的代码中检查 null。例如,如果我用于lateinit以下内容:
viewpager = activity?.findViewById<CustomViewPager>(R.id.viewpager) 那么我将不得不检查空值。
我有一个单独的文件isolate,它通过流快照监听cloud-firestore文档。
为此,我使用了isolate_handler效果很好的包。因此,要在隔离内部
使用,需要创建一个新的 Firebase 应用程序实例。cloud-firestoreawait Firebase.initializeApp()
唯一的问题是通过调用杀死隔离时出现的,IsolateHandler.kill(name);
看起来整个 Firebase 实例在隔离被杀死时也从本机端被杀死。
这是实现的一个小表示:
static launchStreamIsolate(Function(IsolatedQuerySnapshot) snapshot) {
if (!_isolateHandler.isolates.containsKey("listener"))
/// _startStream is a function that listens to the changes on Firestore.
_isolateHandler.spawn(_startStream,
name: "stream",
onInitialized: () => _isolateHandler.send("startListening", to: "stream"),
onReceive: (json) {
_isolateHandler.send("stopListening", to: "stream");
snapshot.call(IsolatedQuerySnapshot.fromJson(json));
});
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是当我在小部件的回调中调用以下方法时dispose(),应用程序崩溃:
static disposeOff() async {
_isolateHandler.isolates.forEach((key, value) => _isolateHandler.kill(key));
print("Secondary isolates disposed");
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
-[__NSCFString setStreamHandler:]: unrecognized selector sent to instance 0x281207100 …Run Code Online (Sandbox Code Playgroud) 我最近在一些设备上遇到了上面提到的崩溃,不知道是什么触发了它。
有些答案建议扩展 LayoutManager 并使异常静音,但我宁愿为此找到一个永久有效的解决方案,有些建议清除我正在执行但仍然崩溃的适配器中的列表。
这是 Adapter 类 -
class Adapter(private val adapterType: Int, private val clickListener: GalleryHolder.ClickListener) : SelectableAdapter<Adapter.GalleryHolder>() {
val objectArrayList: ArrayList<String> = ArrayList()
private var emptyView: View? = null
companion object {
const val IMAGE = 0
const val VIDEO = 1
}
fun addAll(items: ArrayList<String>) {
objectArrayList.addAll(items)
notifyItemRangeInserted(0, objectArrayList.size)
}
fun clear() {
val size = objectArrayList.size
notifyItemRangeRemoved(0, size)
objectArrayList.clear()
}
override fun getItemCount(): Int {
return objectArrayList.size
}
fun setEmptyView(emptyView: View) {
this.emptyView = emptyView
} …Run Code Online (Sandbox Code Playgroud) 如果文件已存在,如何增加文件名?这是我正在使用的代码 -
int num = 0;
String save = at.getText().toString() + ".jpg";
File file = new File(myDir, save);
if (file.exists()) {
save = at.getText().toString() + num +".jpg";
file = new File(myDir, save);
num++;
}
Run Code Online (Sandbox Code Playgroud)
此代码有效,但只保存了2个文件,如file.jpg和file2.jpg
我正在使用MuPDF库在我的应用程序中显示pdf ..可以查看保存在内部或外部存储器中的PDF,但是如果应用程序存储在应用程序的资源文件夹中,则不显示pdf ...如何在应用PDF中查看?
我已经看过解决方案,说我们可以在应用程序相关文件夹中复制我们的应用程序PDF,然后在以后使用它们......但我无法得到它...
这是代码 -
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button showPDFBtn = (Button)findViewById(R.id.btn_show_pdf);
showPDFBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse("file:///android_asset/test.pdf");
Intent intent = new Intent(MainActivity.this, MuPDFActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri);
startActivity(intent);
}}
);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用一个片段,编译器不会抛出任何错误.但是当我按下我创建了一个监听器的指定按钮时,该应用程序崩溃了!logcat引用了null object reference这部分代码......
private ImageView i;
private String key = null;
private ArrayList<String> lst = new ArrayList();
private OnClickListener lstn = new OnClickListener() {
public void onClick(View v)
{
EditText et1 = (EditText) v.findViewById(R.id.editText1);
profilname = et1.getText().toString();
new getPbLink().execute(new String[]{profilname});
}
};
private OnClickListener lstn1 = new OnClickListener() {
public void onClick(View v)
{
if (pb == null)
{
Toast.makeText(getActivity(),"nodp", 0)
.show();
} else
{
SaveImage(pb);
Toast.makeText(getActivity(), "saved", 0)
.show();
}
}
};
Run Code Online (Sandbox Code Playgroud)
该怎么办?logcat -
Process: com.nav.drawer, PID: …Run Code Online (Sandbox Code Playgroud)